Вопрос

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

Это было полезно?

Решение

Вы можете сказать форме, чтобы отправиться в Self 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

Вы можете проверить, был ли он запрос публикации в коде страницы, а затем проверить данные. Если это был запрос получить - просто покажите форму.

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

Конечно, вы могли бы изучить запросы Ajax, где вы бы сделали асинхронный звонок в свой сценарий обработчика, а затем обновите страницу отправки с помощью сообщения успеха. Это создает впечатление «обработка той же страницы», то есть страница не должна обновляться.

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

@Michael Irigoyen: Он работает нормально, но на первом RN/Load - это показывает:

«Уведомление: неопределенная переменная: ошибка в C: xampp htdocs some_page.php в строке 28»

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

Получил сейчас: «ИССЕТ, @ и т. Д. Для подавления ошибок ...» «Работает как очарование !!!» "Теперь я попробую на своем коде ..."

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top