Как обрабатывать форму на одной странице с помощью отдельной страницы процесса. Прямо сейчас для регистрации, комментариев и т. Д. Я использую вторую страницу, которая проверяет данные, а затем отправляет и направляет обратно на home.php. Как я могу сделать это так, чтобы при отправке сама страница проверяла, а не использовала вторую страницу.
Вы можете сообщить, что форма должна быть отправлена на PHP, а затем проверить переменные $_POST
для обработки формы. Этот метод очень хорош для проверки ошибок, так как вы можете установить ошибку, а затем перезагрузить форму с любой информацией, которую пользователь ранее представил по тактике (т. Е. Они не теряют представление).
Когда нажата кнопка «Отправить», она отправит информацию на ту же страницу, запустив код PHP вверху. Если возникает ошибка (на основе ваших проверок), форма будет перезагружаться для пользователя с отображаемыми ошибками и любой информацией, которую пользователь поставил в полях. Если ошибка не возникает, вы увидите страницу подтверждения вместо формы.
<?php //Form submitted if(isset($_POST['submit'])) { //Error checking if(!$_POST['yourname']) { $error['yourname'] = "<p>Please supply your name.</p>\n"; } if(!$_POST['address']) { $error['address'] = "<p>Please supply your address.</p>\n"; } //No errors, process if(!is_array($error)) { //Process your form //Display confirmation page echo "<p>Thank you for your submission.</p>\n"; //Require or include any page footer you might have //here as well so the style of your page isn't broken. //Then exit the script. exit; } } ?> <form method="post" action="<?=$_SERVER['PHP_SELF']?>"> <?=$error['yourname']?> <p><label for="yourname">Your Name:</label><input type="text" id="yourname" name="yourname" value="<?=($_POST['yourname'] ? htmlentities($_POST['yourname']) : '')?>" /></p> <?=$error['address']?> <p><label for="address">Your Address:</label><input type="text" id="address" name="address" value="<?=($_POST['address'] ? htmlentities($_POST['address']) : '')?>" /></p> <p><input type="submit" name="submit" value="Submit" /></p> </form>
Простейшая конструкция заключается в том, чтобы определить, не является ли массив $_POST
пустым
if(isset($_POST['myVarInTheForm'])) { // Process the form } // do the regular job
вы можете проверить, был ли это запрос POST внутри кода страницы, а затем проверить данные. Если это был запрос GET – просто покажите форму.
Но, пожалуйста, помните, что это хорошая практика, показывающая успешные результаты представления формы на другой странице, поданной с помощью запроса GET, т.е. на любую успешную форму POST следует ответить с перенаправлением на страницу успеха.
Разумеется, вы можете изучить запросы AJAX, где вы должны сделать асинхронный вызов сценарию обработчика, а затем обновить, а затем обновить страницу отправки с сообщением об успешном завершении. Это создает впечатление «Одной обработки страницы», т. Е. Страница не нуждается в обновлении.
Однако это зависит от того эффекта, который вы пытаетесь достичь.
@Michael Irigoyen: Он отлично работает, но при первом rn / load он показывает:
"Примечание: Неопределенная переменная: ошибка в C: \ xampp \ htdocs \ same_page.php в строке 28"
Как справиться с этим уведомлением?
Получил это сейчас: «Используется isset, @ и т. Д., Чтобы подавить ошибки …» «Работает как шарм !!!» «Теперь я попробую это на моем коде …»
Я сохранил сообщение благодарности и обновился с использованием переменных сеанса.
if(!is_array($error)){ $_SESSION['message'] = 'Thank You!'; header('Location: yourpage.php'); exit(); }
а затем используйте это в верхней части формы:
if(isset($_SESSION['message'])){ echo $_SESSION['message']; unset($_SESSION['message']; }
сif(isset($_SESSION['message'])){ echo $_SESSION['message']; unset($_SESSION['message']; }
Это должно обновить страницу и показать сообщение, а затем, если они обновят страницу, переменная сеанса пуста, поэтому вы не увидите. Это называется флэш-сообщением.