Если проверка формы не удалась, как передать информацию об ошибке для новой попытки? - PullRequest
4 голосов
/ 13 октября 2009

Я занимаюсь разработкой класса проверки формы в PHP. Когда проверка формы не удалась, я легко могу снова перенаправить на html-страницу формы, но без информации об ошибке. Я хотел бы перенаправить на страницу формы с конкретными ошибками о том, какие поля не удалось и почему.

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

Спасибо!

Ответы [ 6 ]

2 голосов
/ 13 октября 2009

Я согласен с предложением пользователя 187291 использовать $_SESSION, потому что:

  • Он не перехватывает URI, как при использовании $_GET (вам никогда не понадобится статическая ссылка на сообщение о состоянии). Пользователи могут нажать «назад» на страницу с вашей формой и по-прежнему видеть сообщение о состоянии, потому что URI говорит об этом.
  • Распечатайте и удалите его за один раз, вы не сможете использовать его более одного раза (что вам нужно?!)

Если вы используете AJAX, $_GET более широко используется для получения значений, что вы делаете из контроллера валидации.

2 голосов
/ 13 октября 2009

Вы можете использовать функцию header (). Так что просто проверьте поля, которые размещены:

if(!$form->valid()){
    $msg = "Form is not valid";
} else { 
    //Don't know if you want this
    $msg = "Form is valid";
}

header("Location: [page where you came from]?msg=" . urlencode($msg));

Затем на странице, куда вы перенаправляете использовать

if(isset($_GET['msg]))
    echo urldecode($_GET['msg']);

чтобы повторить сообщение. Если вы используете другие переменные get в расположении функции заголовка, конечно, используйте &msg=" . urlencode($msg). (Возможно, вы также захотите вернуть значения, предоставленные пользователем, чтобы пользователю не пришлось снова заполнять всю форму, если он допустил 1 ошибку.

1 голос
/ 13 октября 2009

есть количество подходов

  • передать ошибки в GET при перенаправлении назад, как вы сказали
  • использовать сеансы для хранения информации об ошибках, на странице формы проверьте Session на наличие ошибок
  • не перенаправлять после сбоя, просто снова вывести форму вместе с сообщениями об ошибках
  • AJAX отправляет

какой из них использовать, зависит от приложения. Для большинства приложений метод сессий является наиболее подходящим.

0 голосов
/ 15 июля 2014

Я делаю это так. Новичок в php, поэтому не уверен, что это лучший способ:

Страница формы HTML:

<form id="abc" method="post" action="validate.php">

PHP Page ... условия проверки ... вызов функции, если вещи не совпадают

function display_error($error) {
        echo "<html><body><link href='style.css' rel='stylesheet' type='text/css'><br><center><h2>";
        echo "$error";
        echo "</h2></center><br><br>";
        echo "<center><input type='button' value='Go Back' onClick='history.go(-1)' style='width:100px; height:28px; font-size:16px'></center>";
        echo "</body></html>";
    }

Нажатие на кнопку «Назад» возвращает вас на html-страницу с сохранением данных.

0 голосов
/ 18 октября 2009

Я использую класс для взаимодействия с $ _POST, аналогично следующему:

// create the object
$post = new PostData();

// register your requirements... write whatever methods you need
// for each call,read $_POST, check criteria, and mark the field
// as good or bad...
$post->required ('LastName');
$post->required ('FirstName');
$post->numeric ('Age');
$post->optional ('MiddleInitial');
$post->regExp ('/\d{3}/','AreaCode');
$post->email ('Email');

// check the status
if (!$post->isValid ())
{
    $_SESSION['FailedPostData'] = $post;
    header ('Location: page.php');
}

// normal form processing

Затем на странице page.php вы можете увидеть, присутствует ли FailedPostData в сеансе, прочитать его, чтобы найти информацию, введенную в прошлый раз, а также какие поля не удалось выполнить. Я использую шаблонизатор с макросами, который позволяет мне легко заново заполнять поля ввода и отмечать ошибки. В противном случае вы можете получить много кода для простой формы ...

Вам также понадобится механизм, чтобы быть уверенным, что устаревшие FailedPostData не зависают в сеансе и не запутывают вещи.

0 голосов
/ 13 октября 2009

Примерно так:

// Псевдокод

function isValid($parm) {
   $return = false;
   if(preg_match(/^[a-zA-Z]+$/, $parm) {
      $return = true;
   }
   return $return;
}

$firstname = $_GET["fname"];
$lastname  = $_GET["lname"];

$validFirstName = isValid($firstname);
$validLastName  = isValid($lastname);

if($validFirstName == true && $validLastName == true) {
   echo "It's all good";
   // Do what you need to like, Submit
} else {
   echo "Please retry";
   // Display error message
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...