#6. 7 php web приложения Проверка данных

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

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

if (isset($_REQUEST['seen_already'])) {
  ...  
} else {
   display_form();
}

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

$errors = array();
if (isset($_REQUEST['seen_already'])) {
    validate_data();
    if (count($errors) > 0) {
        display_errors();
        display_form();
    } else {
        process_data();
    }
} else {
    display_form();
}

В следующих разделах будут рассмотрены различные реализации функции для проверки данных validate_data, в зависимости от структуры формы. Функция display_errors предназначена для отображения всех сообщений об ошибках и может выглядеть следующим образом:

function display_errors()
{
    global $errors;
    foreach ($errors as $err) {
        echo $err . '<BR>';
    }
}

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

function display_form()
{
    echo "<FORM METHOD='POST' ACTION='phpvalidate.php'>";
    echo "<INPUT TYPE='SUBMIT' VALUE='OK'>"
    echo "<INPUT TYPE='HIDDEN' NAME='seen_already' VALUE='data'>";
    echo "</FORM>";
}