Как вывести ошибки при заполнении html формы

Как вывести ошибки при заполнении html формы

Индекс материала
Как вывести ошибки при заполнении html формы
Как вывести ошибки при заполнении html формы стр.2
Все страницы

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

Один из вариантов это сделать сохранить сообщения в массиве $errors, индексируя их по именам полей.


  if (!pc_validate_zipcode($_REQUEST['zipcode']))
  {
    $errors['zipcode'] = 'This is is a bad ZIP Code. ZIP Codes must
                          have 5 numbers and no letters.';
  }

При повторном выводе html формы, если при вводе пользователь где то накосячил, можно показывать каждую ошибку с помощью поля, помещая в него исходное значение:


    echo $errors['zipcode'];
$value = isset($_REQUEST['zipcode']) ? htmlentities($_REQUEST['zipcode']) : '';
echo "<input type=\"text\" name=\"zipcode\" value=\"$value\">";

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

Прежде всего, нетрудно определить, нашлись ли в результате проверки на достоверность информации какие-либо элементы, требующие исправления; просто используйте PHP функцию count($errors). Если она вернёт число отличное от нуля, то значит есть проблемы.

Использовать такой метод проще, чем следить за этим событием с помощью отдельной переменной, особенно, если поток или PHP скрипт сложный или реализуется с помощью множества функций. В примере ниже показана функция проверки на правильность pc_validate_form(), которая использует массив $errors.


    function pc_validate_form()
    {
      if (! pc_validate_zipcode($_POST['zipcode']))
      {
        $errors['zipcode'] = "ZIP Codes are 5 numbers";
      }      
      if (! pc_validate_email($_POST['email']))
      {
        $errors['email'] = "Email addresses not correct!";
      }
      return $errors;
    }


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

Функция pc_print_form() в примере ниже показывает, как это сделать.


  function pc_print_form($errors)
  {
    $fields = array('name' => 'Name','rank' => 'Rank','serial' => 'Serial');
    if (count($errors))
    {
      echo 'Please correct the errors in the form below.';
    }
    echo '<table>';
    
    // выводим ошибки и переменные формы
    foreach ($fields as $field => $field_name)
    {
      // открываем строку
      echo '<tr><td>';
      // печатаем ошибку
      if (!empty($errors[$field]))
      {
        echo $errors[$field];
      }
      else
      {
        echo '&nbsp;'; // чтобы не портить внешний вид таблиц
      }
      echo '</td><td>';
      
      // печатаем имя и введенную информацию
      $value = isset($_REQUEST[$field]) ? htmlentities($_REQUEST[$field]) : '';
      echo $field_name.':';
      echo '<input type=\"text\" name=\"$field\" value=\"$value\" />';
      echo '</td></tr>';
    }
    echo '</table>';
  }

Сложная часть функции pc_print_form() начинается с массива $fields. Ключ – это имя переменной; значением является подходящее для показа имя поля. Определив их в начале функции, можно создать цикл по значениям с помощью оператора PHP foreach; иначе понадобятся три отдельные строки с идентичным кодом. К этому добавляется использование имени переменной в качестве ключа в массиве $errors, поскольку можно найти сообщение об ошибке внутри цикла, просто проверяя элемент $errors[$field].

Если необходимо распространить этот пример на поля ввода, отличные от text, модифицируйте массив $fields, включив дополнительную метаинформацию о типах полей html формы:


    $fields = array( 'name' => array('name' => 'Name', 'type' => 'text'),
                     'rank' => array('name' => 'Rank', 'type' => 'password'),
                     'serial' => array('name' => 'Serial', 'type' => 'hidden') );    

Добавить комментарий


Защитный код
Обновить



Кто на сайте
Сейчас 120 гостей онлайн