#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» для добавления в файлы.