Запись в файл с помощью формы ввода PHP

#php #forms #file-handling #file-writing

Вопрос:

Цель проекта, которым я занимаюсь, заключается в создании различных PHP-форм для создания, записи, чтения и удаления файлов. Это (insert.php) является моей страницей «запись на» и открывает файл правильно, но при нажатии кнопки «fileInsert» он обновляет страницу и закрывает открытый файл перед записью или отображением сообщения об успешном выполнении. Любая помощь или предложения приветствуются

 lt;!DOCTYPE htmlgt; lt;htmlgt;   lt;headgt;  lt;titlegt;File Creatorlt;/titlegt;  lt;/headgt;   lt;bodygt;  lt;h1gt;File Creatorlt;/h1gt;  lt;form action="" method="post"gt;  lt;label for="fileName"gt;Enter the name of the file you would like to open including the extension:lt;/labelgt;lt;br /gt;  lt;input type="text" name="fileName"gt;lt;br /gt;  lt;input type="submit" value="Open File" name="fileOpen"gt;  lt;/formgt;  lt;/bodygt;   lt;?php      if(isset($_POST['fileOpen'])) {   $fileName = $_POST['fileName'];  echo str_ireplace("None", $fileName, "lt;h3gt;Currently open: Nonelt;/h3gt;lt;br /gt;");   if (is_file($fileName)) {  echo "lt;form action='' method='post'gt;";  echo "lt;label for='fileInput'gt;File is open!lt;br /gt;Insert up to 40 characters:lt;/labelgt;lt;br /gt;";  echo "lt;input type='text' name='fileInput' maxlength='40'gt;lt;br /gt;";  echo "lt;input type='submit' value='Submit' name='fileInsert'gt;lt;br /gt;lt;br /gt;";  echo "lt;/formgt;";   if(isset($_POST['fileInsert'])) {   $fileInput = $_POST['fileInput'];   $myfile = fopen($fileName, "w");   fwrite($myfile, $fileInput);  fclose($myfile);   echo "Done! lt;br /gt;";    }  }  else {  echo "File does not exist. lt;br /gt;lt;br /gt;";   echo "lt;a href='start.php'gt;lt;buttongt;Return to Homepagelt;/buttongt;lt;/agt;";  }    }   else {  echo "lt;h3gt;Currently open: Nonelt;/h3gt;lt;br /gt;";  }   ?gt;  lt;/htmlgt;```  

Комментарии:

1. fileOpen и fileInsert оба они не могут быть установлены, они находятся в разных формах, представленных в разное время. Вам нужна либо одна форма с именем файла и вводом, либо двухэтапный процесс, в котором второй шаг открывается и записывается.

Ответ №1:

Каждый раз, когда форма публикуется на одной и той же странице или на любой другой… у нас есть только последние данные о посте в $_POST.

Это очень просто… так как вы отправляете другую форму на той же странице… 2-я отправка снова загружает страницу… но теперь… в $_POST[‘FileOpen’] нечего обрабатывать, так как 2-й пост содержит только данные 2-го поста, так что вот исправленная версия для вас:

 lt;!DOCTYPE htmlgt; lt;htmlgt;   lt;headgt;  lt;titlegt;File Creatorlt;/titlegt;  lt;/headgt;   lt;bodygt;  lt;h1gt;File Creatorlt;/h1gt;  lt;form action="" method="post"gt;  lt;label for="fileName"gt;Enter the name of the file you would like to open including the extension:lt;/labelgt;lt;br /gt;  lt;input type="text" name="fileName"gt;lt;br /gt;  lt;input type="submit" value="Open File" name="fileOpen"gt;  lt;/formgt;  lt;/bodygt;   lt;?php   if(isset($_POST['fileInsert'])) {   $fileInput = $_POST['fileInput'];   $myfile = fopen($_POST['fileName'], "w");   fwrite($myfile, $fileInput);  fclose($myfile);   echo "Done! lt;br /gt;";   }   if(isset($_POST['fileOpen'])) {   $fileName = $_POST['fileName'];  echo str_ireplace("None", $fileName, "lt;h3gt;Currently open: Nonelt;/h3gt;lt;br /gt;");   if (is_file($fileName)) {  echo "lt;form action='' method='post'gt;";  echo "lt;label for='fileInput'gt;File is open!lt;br /gt;Insert up to 40 characters:lt;/labelgt;lt;br /gt;";  echo "lt;input type='text' name='fileInput' maxlength='40'gt;lt;br /gt;";  echo "lt;input type='hidden' name='fileName' value='$fileName' gt;";  echo "lt;input type='submit' value='Submit' name='fileInsert'gt;lt;br /gt;lt;br /gt;";  echo "lt;/formgt;";    }  else {  echo "File does not exist. lt;br /gt;lt;br /gt;";   echo "lt;a href='start.php'gt;lt;buttongt;Return to Homepagelt;/buttongt;lt;/agt;";  }   }   else {  echo "lt;h3gt;Currently open: Nonelt;/h3gt;lt;br /gt;";  }   ?gt;  lt;/htmlgt;  

Я вырезал $_POST[«fileInsert»] за пределами $_POST [«FileOpen»], потому что, когда мы получаем это, мы не получаем это, и я добавил скрытое поле ввода во 2-й форме с именем fileInput, которое я использую в if из $_POST [«fileInsert»] Мне нужно знать имя файла, которое также было потеряно с момента первого поста!

Этот метод также выведет «В данный момент открыто:нет» в конце после завершения!

Кстати: это перезапишет ваши файлы! используйте «a» вместо «w» для добавления в файлы.