Класс Validator для валидации POST данных
Наверное каждый при разработке того или иного веб-приложения на PHP сталкивался с необходимостью обработки данных переданных методом POST. Например это может быть форма обратной связи или форма регистрации, или форма опроса, которая отправляет введенные пользователем данные на сервер методом POST. И первой задачей разработчика является валидация пользовательских данных пришедших методом POST. Как правило эта валидация сводится:
- проверка заполнения всех обязательных полей
- проверка корректности email-адреса или URL адреса, если таковы имеются
- проверка корректности остальных данных (в поле ввода можно вводить лишь цифры или буквы, либо и то и другое, либо проверка уникальности логина в базе данных и т. д.)
- фильтрация данных от вредоносного кода
Как правило все эти проверки повторяются и Вам приходится писать практически один и тот же код, для валидации POST данных, что приводит к дублирование php кода.
Чтобы этого избежать мною был написан простой класс для валидации POST данных на PHP. Данный класс очень простой и легкий в использовании, и Вы можете использовать его в Ваших скриптах. Называется этот класс Validator.
Сразу скажу, что мой класс похож на библиотеку Form_validation в Codeigniter, только немного модифицированный. Поэтому если Вы знакомы с этой библиотекой, то Вам не составит никакого труда разобраться с моим классом валидации POST данных.
Что мне понравилось в библиотеке Form_validation, так это простота задания полей для валидации и собственно сама валидация. Для меня это стало отправной точкой при разработке своего класса валидации.
Давайте взглянем на небольшой пример использования данного класса
require_once 'validator.php'; $validator = new Validator(); $validator->set_rules('name','Ваше имя',array('required' => 'Поле %s обязательно для заполнения','alpha' => 'Поле %s должно содержать только буквы')); $validator->set_rules('email','Ваш email',array('required' => 'Поле %s обязательно для заполнения','valid_email' => 'Поле %s должно содержать правильный email-адрес')); if($validator->run()){ echo "Валидация прошла успешно"; } else{ echo $validator->get_string_errors(); }
В начале мы подключаем файл класса validator.php к нашем скрипту. Далее создаем экземпляр класса и сохраняем объект в переменную $validator.
Затем используя метод $validator->set_rules($field, $label, $rules) задаем поля для валидации.
Данный метод принимает 3 параметра:
- $field — имя поля валидации (значение атрибута name в теге <input name="name" />)
- $label — название поля валидации, будет подставляться в сообщения об ошибках
- $rules — массив правил валидации, у которого в качестве ключа используется правило валидации, а в качестве значения — сообщение об ошибке для этого правила
После того, как все поля для валидации установлены, запускаем валидатор используя метод $validator->run(). Если валидация прошла успешно, то данный метод вернет значение TRUE, иначе, если есть хоть какие-то ошибки, вернет FALSE.
Для того чтобы получить сообщения об ошибках существует три метода:
- get_string_errors() - возвращает все сообщения об ошибках в виде строки
- get_array_errors() - возвращает все сообщения в виде массива, где в качестве ключа используется имя поля, а в качестве значения — описание ошибки для этого поля.
- form_error($field) — возвращает сообщение об ошибке для поля, переданного в качестве параметра $field
По умолчанию сообщения об ошибках оборачиваются в тег <p></p>. Для того чтобы задать свое оформление используйте метод set_error_delimiters($prefix, $suffix). Например так:
$validator->set_error_delimiters('<div class='error'>','</div>');
Теперь сообщения об ошибках будут оборачиваться в div с классом «error»
Как видите все очень просто.
Для установки правил валидации Вы можете методу set_rules($fields) передать многомерный ассоциативный массив. Давайте посмотрим на пример:
$rules = array( array( 'field' => 'name', 'label' => 'Ваше имя', 'rules' => array( 'required' => 'Поле %s обязательно для заполнения', 'alpha' => 'Поле %s должно содержать только буквы' ) ), array( 'field' => 'email', 'label' => 'Ваш email', 'rules' => array( 'required' => 'Поле %s обязательно для заполнения', 'valid_email' => 'Поле %s должно содержать правильный email-адрес' ) ) ); $validator->set_rules($rules);
Как видите я записал те же самые правила валидации, что и в первом примере, только в виде многомерного ассоциативного массива. Вы можете использовать любой из способов, который Вам больше подходит в той или иной ситуации.
Итак, какие же правила валидации поддерживает данный класс?
Я вынес в этот класс наиболее распространенные правила валидации, с которыми сталкивается каждый. Вот полный список этих правил:
required | Возвращает FALSE если поле не заполнено |
integer | Возвращает FALSE если значение не является целым числом |
float | Возвращает FALSE если значение не числового вида |
valid_url | Возвращает FALSE если значения не является корректным URL адресом |
valid_email | Возвращает FALSE если значения не является корректным e-mail адресом |
valid_ip | Возвращает FALSE если IP-адрес не является действительным |
matches[field] | Возвращает FALSE если элемент не соответствует значению другого элемента field |
alpha | Возвращает FALSE если элемент содержит не только буквы |
valid_captcha[field] | Возвращает FALSE если значение в сессии field не равно значению поля формы |
valid_date | Возвращает FALSE если элемент содержит не корректную дату |
Большинство этих правил используют фильтры, которые стали доступны в PHP 5.
При желании вы всегда можете расширить набор правил для валидации, дописав нужные функции в класс Validator.
Для того чтобы получить обработанное значение POST данных используется метод:
$validator->postdata($field);
Вместо $field подставляется нужный ключ POST данных.
А для того, чтобы очистить все значения POST данных используется метод:
$validator->reset_postdata($field);
Обычно данный метод вызываетя для очистки формы, при успешной обработке формы.
Ну вот собственно и все, что я хотел Вам рассказать. В следующей статье я покажу, как использовать этот класс на практике.
-
Комментарии (11)
- Сайт