Учебник по PHP 4 |
Сколько новых сайтов Вы делаете за год? результаты |
|
Проверка корректности данных
Проверке корректности данных, вводимых пользователем необходимо уделять достаточно большое внимание, поскольку необработанные ошибки, возникающие при вводе неправильном вводе данных, приводят к ошибкам в работе скрипта, зачастую катастрофическим. Предположим, вы создаете форму для отправки пользователем письма, при этом адрес электронной почты необходимо вводить пользователю. В этом случае, для корректной работы программы вы должны сделать, по крайней мере, две вещи:
Кроме чистых ошибок пользователя, необходимо также исключить ситуации, в которых возможно злонамеренное введение некорректных данных, к примеру, различных скриптов. Для этого вводимый пользователем текст необходимо обработать функциями удаления HTML-тегов (для исключения возможности написания скриптов на JavaScript и Visual Basic) и обратных слешей (для исключения возможности написания скриптов на Perl). Т. о. минимальный набор действий, необходимый для проверки корректности данных, вводимых пользователем, включает следующие этапы:
Проверка на пустоту поляПроверка того, что пользователь ввел данные, может осуществляться, к примеру, с помощью функции isset: <? $name = $_POST['name']; if (!isset($name)) { // если переменная $name не существует просим повторить ввод имени ?> <h1> Вы забыли ввести ваше имя </h1> <!-- далее следует HTML-код формы, в которой вводится имя --> <? } else { - } ?> Для этой же цели можно использовать функцию empty: <? $name = $_POST['name']; if (empty($name)) { // если поле пустое, снова просим ввести имя ?> <h1> Вы забыли ввести ваше имя <h1> <!-- далее следует HTML-код формы, в которой вводится имя --> <? } else { - } ?> На практике удобно сначала проверить, не пустой ли action формы, а потом уже проверять различные его составляющие: поле имя, e-mail и т. д. К примеру: <? $action = $_POST["action"]; if (!empty($action)) { if (empty($name)) { // код, для случая, когда не введено имя } if (empty($email)) { // код, для случая, когда не введен e-mail } // дальнейший код скрипта } if (empty($action)) { ?> <!-- здесь пишем HTML-код формы, в которой вводится информация --> <? } ?> Проверка допустимости вводимых данныхПусть нам надо проверить данные формы для отправки сообщения гостевой книги. Как правило, такая проверка осуществляется при помощи регулярных выражений. Рассмотрим пример, в котором создается регулярное выражение для проверки адреса электронной почты. Будем исходить из того, что адрес должен иметь вид something@server.com. Как видим, у адреса две составляющие - имя пользователя и имя домена, которые разделены знаком @. В имени пользователя могут присутствовать буквы нижнего и верхнего регистров, цифры, знаки подчеркивания и минуса, точки. Для проверки разделителя между именем пользователя и именем домена в выражение требуется добавить +@. Таким образом, регулярное выражение, проверяющее имя пользователя и наличие разделителя имеет следующий вид: "/[0-9a-z_]+@[0-9a-z_^\.]" Для проверки доменного имени добавляем такое выражение: "\.[a-z]{2,3}/i" Объединяя эти шаги, получаем следующее регулярное выражение для проверки адресов электронной почты: "/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i" Точно таким же образом вы можете проверить и остальные заполняемые пользователем поля. Удаление HTML - тегов и обратных слешейКак уже говорилось, вводимый пользователем текст необходимо обработать функциями удаления HTML-тегов (для исключения возможности написания скриптов на JavaScript и Visual Basic) и обратных слешей (для исключения возможности написания скриптов на Perl). К примеру, если переменная $name содержит текст с именем пользователя, то обработка этого текста выглядит так: <? $name = substr($_POST["name"],0,32); $name = htmlspecialchars(stripslashes($name)); ?>
Если Вам нужна частная профессиональная консультация от авторов многих книг Кузнецова М.В. и Симдянова И.В., добро пожаловать в наш Консультационный Центр SoftTime. |