Обработка одной и той же страницы


Как можно обработать форму на одной странице по сравнению с использованием отдельной страницы процесса. Прямо сейчас для регистрации, отправки комментариев и т. Д. Я использую вторую страницу, которая проверяет данные, а затем отправляет и направляет обратно на home.php . Как я могу сделать так, чтобы при отправке сама страница проверялась, а не использовалась вторая страница.

Author: Brian Tompsett - 汤莱恩, 2011-01-24

6 answers

Вы можете указать форме, чтобы она была отправлена самому 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>
 12
Author: Michael Irigoyen, 2011-01-24 15:48:36

Самая простая конструкция - определить, не является ли массив $_POST пустым

if(isset($_POST['myVarInTheForm'])) {
  // Process the form
}

// do the regular job
 6
Author: Jonas, 2011-01-24 14:56:09

Вы можете проверить, был ли это запрос на публикацию внутри кода страницы, а затем проверить данные. Если это был запрос на ПОЛУЧЕНИЕ - просто покажите форму.

Но, пожалуйста, помните, что это хорошая практика, чтобы показывать результаты успешной отправки формы на другой странице, обслуживаемой с помощью запроса GET, т.Е. На любую успешную публикацию формы следует отвечать перенаправлением на страницу успеха.

 1
Author: gaius_julius, 2011-01-24 14:56:39

Вы, конечно, могли бы изучить запросы AJAX, где вы могли бы выполнить асинхронный вызов скрипта обработчика, а затем обновить, а затем обновить отправляющую страницу сообщением об успешном выполнении. Это создает впечатление "Обработки одной и той же страницы", т. е. Страницу не нужно обновлять.

Однако это действительно зависит от эффекта, которого вы пытаетесь достичь.

 1
Author: diagonalbatman, 2011-01-24 15:02:58

@Майкл Иригойен: Он работает нормально, но при первом запуске/загрузке он показывает:

" Примечание: Неопределенная переменная: ошибка в C:\xampp\htdocs\same_page.php в режиме онлайн 28"

Как обращаться с этим уведомлением?

Теперь понял: "Используется isset, @и т. Д. чтобы подавлять ошибки..." "Работает как заклинание!!!" "Теперь я попробую это на своем коде..."

 0
Author: Viral Jain, 2011-07-25 06:05:01

Я сохранил сообщение с благодарностью и обновил его с помощью переменных сеанса.

if(!is_array($error)){
    $_SESSION['message'] = 'Thank You!';
    header('Location: yourpage.php');
    exit();
} 

А затем используйте это в верхней части формы:

if(isset($_SESSION['message'])){ 
    echo $_SESSION['message'];
    unset($_SESSION['message'];
} 

Это должно обновить страницу и показать сообщение, а затем, если они обновят страницу, переменная сеанса будет пустой, поэтому спасибо не будет отображаться. Это называется флэш-сообщением.

 0
Author: PHPGuru, 2014-06-01 19:56:31