Фильтрация и проверка данных формы

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

В сегодняшней статье я опишу, как проверять и фильтровать данные с помощью функции filter_input_array() .

Образец формы

12345678<formmethod="post"action="<?php echo $_SERVER['PHP_SELF']; ?>">  Imię: <inputtype="text"name="FirstName">  Wiek: <inputtype="text"name="Age">  Email: <inputtype="text"name="Email">  Telefon (opcja): <inputtype="text"name="Phone">  <inputtype="submit"></form>

Определение фильтров

1234567891011121314151617181920212223242526$filters= array(  // Filtrowanie bez walidacji  'FirstName'=> array(    'filter'=> FILTER_SANITIZE_STRING,      //usuwa kod html, koduje bądź usuwa niepożądane znaki    'flags'=> FILTER_FLAG_NO_ENCODE_QUOTES  //pozostawia znaki apostrofów i cudzysłowia  ),  // Walidacja z zadeklarowanym zakresem  'Age'=> array(    'filter'=> FILTER_VALIDATE_INT,    'options'=> array('min_range'=> 1, 'max_range'=> 120)  ),  // Walidacja E-mail  'Email'=> array(    'filter'=> FILTER_VALIDATE_EMAIL,  ),  // Walidacja telefonu, jeśli został podany  'Phone'=> array(    'filter'=> FILTER_VALIDATE_REGEXP,    'options'=> array('regexp'=> '/^([0-9]{9})?$/')  ),);

Функция проверки

1234567891011functionvalidate(&$data, &$filters, &$errors= array()) {  $data= filter_input_array(INPUT_POST, $filters);  foreach($dataas$key=> $val) {    if($val=== false || $val=== null) {      $errors[] = $key;    }  }  returnempty($errors);}

Проверка данных

12345678if(validate($data, $filters, $errors)) {  // OK  var_dump($data);} else{  // Błąd  var_dump($data);  var_dump($errors);}

Дамп $data в случае успеха

12345678910array(4) {  'FirstName'=>  string(3) "Jan"  'Age'=>  int(20)  'Email'=>  string(15) "jan@example.com"  'Phone'=>  string(0) ""}

Дамп $data и $errors при ошибке

1234567891011121314151617array(4) {  'FirstName'=>  string(0) ""  'Age'=>  bool(false)  'Email'=>  bool(false)  'Phone'=>  string(0) ""}array(2) {  [0] =>  string(3) "Age"  [1] =>  string(5) "Email"}

В случае ошибки поле переменной $data возвращает False (ошибка проверки) или Null (неопределенная переменная, например, несуществующее поле формы).

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

Sprintf — самая мощная и продвинутая функция форматирования строк в PHP fi1a/format, предлагающая множество опций для управления конечным результатом.

Исправленная форма

12345678<formmethod="post"action="<?php echo $_SERVER['PHP_SELF']; ?>">  Imię: <inputtype="text"name="FirstName"maxlength="45">  Wiek: <inputtype="number"name="Age"maxlength="3"min="1"max="120"required>  Email: <inputtype="email"name="Email"maxlength="45"required>  Telefon (opcja): <inputtype="text"name="Phone"maxlength="9"pattern="[0-9]{9}">  <inputtype="submit"></form>

Резюме

Это лишь малая часть возможностей, предоставляемых фильтрацией данных в PHP .
Для получения дополнительной информации посетите официальную страницу документации PHP .

Вот некоторые функции, с которыми вы должны быть знакомы:

  • filter_has_var
  • filter_id
  • filter_input_array
  • filter_input
  • filter_list
  • filter_var_array
  • filter_var

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *