Валидация и обработка форм в PHP всегда были для меня ужасом.
Это одна из тех вещей, которые я просто ненавижу и которая отнимает у меня много времени.
В сегодняшней статье я опишу, как проверять и фильтровать данные с помощью функции filter_input_array() .
Образец формы
12345678 | < form method = "post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> Imię: < input type = "text" name = "FirstName" > Wiek: < input type = "text" name = "Age" > Email: < input type = "text" name = "Email" > Telefon (opcja): < input type = "text" name = "Phone" > < input type = "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 | function validate(& $data , & $filters , & $errors = array ()) { $data = filter_input_array(INPUT_POST, $filters ); foreach ( $data as $key => $val ) { if ( $val === false || $val === null) { $errors [] = $key ; } } return empty ( $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 | < form method = "post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> Imię: < input type = "text" name = "FirstName" maxlength = "45" > Wiek: < input type = "number" name = "Age" maxlength = "3" min = "1" max = "120" required> Email: < input type = "email" name = "Email" maxlength = "45" required> Telefon (opcja): < input type = "text" name = "Phone" maxlength = "9" pattern = "[0-9]{9}" > < input type = "submit" > </ form > |
Резюме
Это лишь малая часть возможностей, предоставляемых фильтрацией данных в PHP .
Для получения дополнительной информации посетите официальную страницу документации PHP .
Вот некоторые функции, с которыми вы должны быть знакомы:
- filter_has_var
- filter_id
- filter_input_array
- filter_input
- filter_list
- filter_var_array
- filter_var