Как сделать так, чтобы не создавалось много файлов php после обновления страницы,а только один файл переменной $to после регистрации?

196
06 февраля 2020, 15:20

PHP

<?php 
$to = substr(md5(time()), 0, 8) .'.php'; // 8 - количество символов
$word = "<?php echo 123; ?>";
    file_put_contents($to, $word);
$file = 'text.txt';
$text = file_get_contents($file);
    echo file_get_contents( 'text.txt' );
    // Обработчик HTML-формы 
  ///////////////////////////////////////////////// 
  // 1. Блок проверки правильности данных 
  ///////////////////////////////////////////////// 
  // Удаляем лишние пробелы 
  $_POST['name'] = trim($_POST['name']); 
  $_POST['pass'] = trim($_POST['pass']); 
  $_POST['pass_again'] = trim($_POST['pass_again']); 
  // Проверяем не пустой ли суперглобальный массив $_POST 
  if(empty($_POST['name'])) exit(); 
  // Проверяем правильно ли заполнены обязательные поля 
  if(empty($_POST['name'])) exit('Поле "Имя" не заполнено'); 
  if(empty($_POST['pass'])) exit('Одно из полей "Пароль" не заполнено'); 
  if(empty($_POST['pass_again'])) exit('Одно из полей "Пароль" не заполнено'); 
  if($_POST['pass'] != $_POST['pass_again']) exit('Пароли не совпадают'); 
  // Если введён e-mail проверяем его на соответсвие 
  if(!empty($_POST['email'])) 
  { 
    if(!preg_match("|^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,6}$|i", $_POST['email'])) 
    { 
      exit('Поле "E-mail" должно соответствовать формату somebody@somewhere.ru'); 
    } 
  } 
  ///////////////////////////////////////////////// 
  // 2. Блок проверки имени на уникальность 
  ///////////////////////////////////////////////// 
  // Имя файла данных 
  $filename = "text.txt";  
  // Проверяем не было ли переданное имя 
  // зарегистрировано ранее 
  $arr = file($filename); 
  foreach($arr as $line) 
  { 
    // Разбиваем строку по разделителю :: 
    $data = explode("::",$line); 
    // В массив $temp помещаем имена уже зарегистрированных 
    // посетителей 
    $temp[] = $data[0]; 
  } 
  // Проверяем не содержится ли текущее имя 
  // в массиве имён $temp 
  if(in_array($_POST['name'], $temp)) 
  { 
    exit("Данное имя уже зарегистрировано, пожалуйста, выберите другое"); 
  } 
  ///////////////////////////////////////////////// 
  // 3. Блок регистрации пользователя 
  ///////////////////////////////////////////////// 
  // Помещаем данные в текстовый файл 
  $fd = fopen($filename, "a"); 
  if(!$fd) exit("Ошибка при открытии файла данных"); 
  $str = $_POST['name']."::". 
         $_POST['pass']."::". 
         $_POST['email']."::". 
         $to."\r\n"; 
  fwrite($fd,$str); 
  fclose($fd); 
  // Осуществляем перезагрузку страницы, 
  // чтобы сбросить POST-данные 
  echo "<HTML><HEAD> 
<META HTTP-EQUIV='Refresh' CONTENT='0; URL='1.php'>
        </HEAD></HTML>"; 
?> 

Переменная $to должна записываться в file.txt через переменную $str и после регистрации создавать только один php файл. А пока создает много.

Помогите, пожалуйста, исправить код

Answer 1

Поправьте блок проверки POST и перенесите его в правильное место.

Вместо:

// Проверяем не пустой ли суперглобальный массив $_POST 
if(empty($_POST['name'])) exit(); 

Сделайте:

// Проверяем не пустой ли суперглобальный массив $_POST 
if(empty($_POST)) exit(); 

И перенесите генерацию файла под блок проверки. В целом как-то так:

<?php 
$file = 'text.txt';
$text = file_get_contents($file);
    echo file_get_contents( 'text.txt' );
    // Обработчик HTML-формы 
  ///////////////////////////////////////////////// 
  // 1. Блок проверки правильности данных 
  ///////////////////////////////////////////////// 
  // Проверяем не пустой ли суперглобальный массив $_POST 
  if(empty($_POST)) exit(); 
  // Удаляем лишние пробелы 
  $_POST['name'] = trim($_POST['name']); 
  $_POST['pass'] = trim($_POST['pass']); 
  $_POST['pass_again'] = trim($_POST['pass_again']); 
  // Проверяем правильно ли заполнены обязательные поля 
  if(empty($_POST['name'])) exit('Поле "Имя" не заполнено'); 
  if(empty($_POST['pass'])) exit('Одно из полей "Пароль" не заполнено'); 
  if(empty($_POST['pass_again'])) exit('Одно из полей "Пароль" не заполнено'); 
  if($_POST['pass'] != $_POST['pass_again']) exit('Пароли не совпадают'); 
  // Если введён e-mail проверяем его на соответсвие 
  if(!empty($_POST['email'])) 
  { 
    if(!preg_match("|^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,6}$|i", $_POST['email'])) 
    { 
      exit('Поле "E-mail" должно соответствовать формату somebody@somewhere.ru'); 
    } 
  } 
  ///////////////////////////////////////////////// 
  // 2. Блок проверки имени на уникальность 
  ///////////////////////////////////////////////// 
  // Имя файла данных 
  $filename = "text.txt";  
  // Проверяем не было ли переданное имя 
  // зарегистрировано ранее 
  $arr = file($filename); 
  foreach($arr as $line) 
  { 
    // Разбиваем строку по разделителю :: 
    $data = explode("::",$line); 
    // В массив $temp помещаем имена уже зарегистрированных 
    // посетителей 
    $temp[] = $data[0]; 
  } 
  // Проверяем не содержится ли текущее имя 
  // в массиве имён $temp 
  if(in_array($_POST['name'], $temp)) 
  { 
    exit("Данное имя уже зарегистрировано, пожалуйста, выберите другое"); 
  } 
  ///////////////////////////////////////////////// 
  // 3. Блок регистрации пользователя 
  ///////////////////////////////////////////////// 
  $to = substr(md5(time()), 0, 8) .'.php'; // 8 - количество символов
  $word = "<?php echo 123; ?>";
  file_put_contents($to, $word);
  // Помещаем данные в текстовый файл 
  $fd = fopen($filename, "a"); 
  if(!$fd) exit("Ошибка при открытии файла данных"); 
  $str = $_POST['name']."::". 
         $_POST['pass']."::". 
         $_POST['email']."::". 
         $to."\r\n"; 
  fwrite($fd,$str); 
  fclose($fd); 
  // Осуществляем перезагрузку страницы, 
  // чтобы сбросить POST-данные 
  echo "<HTML><HEAD> 
<META HTTP-EQUIV='Refresh' CONTENT='0; URL='1.php'>
        </HEAD></HTML>"; 
?>