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

Проверить, что поле, в которое заносится электронный адрес непустое (поскольку пользователь может просто забыть ввести адрес, и, если этот случай необработан, возникнет ошибочная ситуация);
Проверить соответствие введенного адреса с помощью регулярного выражения.
Кроме чистых ошибок пользователя, необходимо также исключить ситуации, в которых возможно злонамеренное введение некорректных данных, к примеру, различных скриптов. Для этого вводимый пользователем текст необходимо обработать функциями удаления HTML-тегов (для исключения возможности написания скриптов на JavaScript и Visual Basic) и обратных слешей (для исключения возможности написания скриптов на Perl). Т. о. минимальный набор действий, необходимый для проверки корректности данных, вводимых пользователем, включает следующие этапы:

проверка того, что пользователь ввел данные
проверка допустимости вводимых пользователем данных (как правило, осуществляется при помощи регулярных выражений)
обработка текста, введенного пользователем функцией htmlspecialchars для удаления HTML-тегов
обработка текста, введенного пользователем функцией stripslashes для удаления обратных слешей
Проверка на пустоту поля
Проверка того, что пользователь ввел данные, может осуществляться, к примеру, с помощью функции isset:

HTML
Текст

  1. < ?
  2.  $name = $HTTP_POST_VARS['name'];
  3.  if (!isset($name))
  4.  {
  5.    // если переменная $name не существует просим повторить ввод имени
  6. ?>
  7.    < h1> Вы забыли ввести ваше имя < /h1>
  8.    <!-- далее следует HTML-код формы, в которой вводится имя -->
  9. < ?
  10.  }
  11.  else
  12.  {
  13.    -
  14.  }
  15. ?>

Для этой же цели можно использовать функцию empty:

HTML
Текст

  1. < ?
  2.  $name = $HTTP_POST_VARS['name'];
  3.  if (empty($name))
  4.  {
  5.    // если поле пустое, снова просим ввести имя
  6. ?>
  7.    < h1> Вы забыли ввести ваше имя < h1>
  8.    <!-- далее следует HTML-код формы, в которой вводится имя -->
  9. < ?
  10.  }
  11.  else
  12.  {
  13.    -
  14.  }
  15. ?>

На практике удобно сначала проверить, не пустой ли action формы, а потом уже проверять различные его составляющие: поле имя, e-mail и т. д. К примеру:

HTML
Текст

  1. < ?
  2.  $action = $HTTP_POST_VARS["action"];
  3.  if (!empty($action))
  4.  {
  5.    if (empty($name))
  6.    {
  7.     // код, для случая, когда не введено имя
  8.    }
  9.    if (empty($email))
  10.    {
  11.       // код, для случая, когда не введен e-mail
  12.    }
  13.  // дальнейший код скрипта
  14.  }
  15.  if (empty($action))
  16.  {
  17. ?>
  18.  <!-- здесь пишем HTML-код формы, в которой вводится информация -->
  19. < ?
  20.  }
  21. ?>

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

Будем исходить из того, что адрес должен иметь вид something@server.com. Как видим, у адреса две составляющие - имя пользователя и имя домена, которые разделены знаком @. В имени пользователя могут присутствовать буквы нижнего и верхнего регистров, цифры, знаки подчеркивания и минуса, точки. Для проверки разделителя между именем пользователя и именем домена в выражение требуется добавить +@. Таким образом, регулярное выражение, проверяющее имя пользователя и наличие разделителя имеет следующий вид:

HTML
Текст

  1.  "/[0-9a-z_]+@[0-9a-z_^.]"

Для проверки доменного имени добавляем такое выражение:

HTML
Текст

  1.  ".[a-z]{2,3}/i"

Объединяя эти шаги, получаем следующее регулярное выражение для проверки адресов электронной почты:

HTML
Текст

  1.  "/[0-9a-z_]+@[0-9a-z_^.]+.[a-z]{2,3}/i"

Точно таким же образом вы можете проверить и остальные заполняемые пользователем поля.

Удаление HTML - тегов и обратных слешей
Как уже говорилось, вводимый пользователем текст необходимо обработать функциями удаления HTML-тегов (для исключения возможности написания скриптов на JavaScript и Visual Basic) и обратных слешей (для исключения возможности написания скриптов на Perl). К примеру, если переменная $name содержит текст с именем пользователя, то обработка этого текста выглядит так:

HTML
Текст

  1. < ?
  2.  $name = substr($HTTP_POST_VARS["name"],0,32);
  3.  $name = htmlspecialchars(stripslashes($name));
  4. ?>



Постоянные ссылки

При копировании ссылка на TeaM RSN обязательна!

URI

Html (ЖЖ)

BB-код (Для форумов)

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.