Валидация и обработка форм в 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})?$/') ),); |
Функция проверки
| 1234567891011 | functionvalidate(&$data, &$filters, &$errors= array()) { $data= filter_input_array(INPUT_POST, $filters); foreach($dataas$key=> $val) { if($val=== false || $val=== null) { $errors[] = $key; } } returnempty($errors);} |
Проверка данных
| 12345678 | if(validate($data, $filters, $errors)) { // OK var_dump($data);} else{ // Błąd var_dump($data); var_dump($errors);} |
Дамп $data в случае успеха
| 12345678910 | array(4) { 'FirstName'=> string(3) "Jan" 'Age'=> int(20) 'Email'=> string(15) "jan@example.com" 'Phone'=> string(0) ""} |
Дамп $data и $errors при ошибке
| 1234567891011121314151617 | array(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