Проверка данных html формы

Проверка данных html формы

Индекс материала
Проверка данных html формы
Проверка данных html формы стр.2
Проверка данных html формы стр.3
Все страницы

Итак, нам необходимо гарантировать, что данные, введенные в html форму, удовлетворяют определенному критерию.
Создадим пользовательскую PHP функцию, которая принимает строку для проверки и возвращает true, если строка прошла проверку, и false, если не прошла.

Внутри PHP функции можно использовать регулярные выражения и сравнения для проверки данных. Так, пример ниже показывает функцию pc_validate_zipcode(), которая проверяет достоверность почтового индекса США.

Пример pc_validate_zipcode():


    function pc_validate_zipcode($zipcode)
    {
        return preg_match('/^[0-9]{5}([-\s]?[0-9]{4})?$/', $zipcode);
    }

Ниже показано, как ее использовать:


    if (pc_validate_zipcode($_REQUEST['zipcode']))
    {
        // почтовый индекс США корректный, можно продолжать
        process_data();
    }
    else
    {
        // это неправильный почтовый индекс, печатаем сообщение об ошибке
        echo "Your ZIP Code is should be 5 digits 
             (or 9 digits, if you're using ZIP+4).";
        print_form();
    }

Какие данные назвать корректными, а какие некорректными, вопрос скорее философский, и ответ на него трудно облечь в конкретную html форму последовательной серии фиксированных шагов. Во многих случаях то, что может абсолютно подходить в одной ситуации, может быть не верным в другой. Легче всего проверить, что поле не пустое. Эту задачу наилучшим образом решает функция empty().



Далее идут относительно простые проверки, такие как в случае с почтовым индексом США. Обычно одно или два регулярных выражения помогают справиться с этой проблемой.

Например - определяет все корректные почтовые индексы США:
/^[0 9]{5}([ ]?[0 9]{4})?$/

Иногда обеспечить соответствие корректным регулярным выражениям трудно. Если нужно проверить, что введенное имя состоит из двух слов, например «Alfred Aho», можно провести сравнение с: /^[A Za z]+ +[A Za z]+$/


Однако Djeck O’Connor не сможет пройти проверку. Альтернативой является /^\S+\s+\S+$/; но тогда отвергается Paul E. Smith. Поэтому перед составлением регулярных выражений следует тщательно продумывать весь диапазон допустимых входных данных.

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

Можно проверить путем сравнения со списком названий, но что если он ввел сокращение своей почтовой службы? Сработает ли MA вместо Massachusetts? А как насчет Mass.? Один из способов обойти эту трудность состоит в том, чтобы предоставить пользователю выпадающий html список заранее сгенерированных вариантов.

Применение html элемента select в конструкции html формы заставляет пользователя выбрать штат в формате, который всегда работает, что может уменьшить количество ошибок. Однако это приводит еще к ряду затруднений. Что если пользователь живет в месте, которое не попадает в список вариантов? Что если диапазон вариантов настолько велик, что является неосуществимым решением? Существует множество путей решения такого типа проблем.

Во-первых, можно добавить в список пункт «other», чтобы пользователь не из США мог успешно заполнить форму. (В противном случае он может выбрать место произвольно – просто чтобы продолжать пользоваться вашим сайтом.)


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

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

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

Решение состоит в том, чтобы иметь два окна ввода. Пользователь вводит свой код дважды; если два поля совпадают, то данные считаются легальными, и затем (по-тихому) проверяется их достоверность. Если значения полей не совпадают, то ввод отвергается, и пользователя просят его исправить.

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

Можно также выполнять проверку корректности данных на стороне клиента с помощью JavaScript. Хотя проверка на стороне клиента и работает быстрее, но при этом код проверки становится виден пользователю, а также он может не работать, если клиент не поддерживает или отключил JavaScript. Поэтому необходимо всегда дублировать на сервере все программы проверки на стороне клиента.

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


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



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