Генератор форм

Для веб-мастера

Реклама

Класс Validator для валидации POST данных

Рейтинг:
Дата: 22 сентября 2011 Просмотры 25545 Комментарии 11
Класс Validator для валидации POST данных

Наверное каждый при разработке того или иного веб-приложения на PHP сталкивался с необходимостью обработки данных переданных методом POST. Например это может быть форма обратной связи или форма регистрации, или форма опроса, которая отправляет введенные пользователем данные на сервер методом POST. И первой задачей разработчика является валидация пользовательских данных пришедших методом POST. Как правило эта валидация сводится:

  1. проверка заполнения всех обязательных полей
  2. проверка корректности email-адреса или URL адреса, если таковы имеются
  3. проверка корректности остальных данныхполе ввода можно вводить лишь цифры или буквы, либо и то и другое, либо проверка уникальности логина в базе данных и т. д.)
  4. фильтрация данных от вредоносного кода

Как правило все эти проверки повторяются и Вам приходится писать практически один и тот же код, для валидации 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 параметра:

  1. $field — имя поля валидации (значение атрибута name в теге <input name="name" />)
  2. $labelназвание поля валидации, будет подставляться в сообщения об ошибках
  3. $rulesмассив правил валидации, у которого в качестве ключа используется правило валидации, а в качестве значениясообщение об ошибке для этого правила

После того, как все поля для валидации установлены, запускаем валидатор используя метод $validator->run(). Если валидация прошла успешно, то данный метод вернет значение TRUE, иначе, если есть хоть какие-то ошибки, вернет FALSE.

Для того чтобы получить сообщения об ошибках существует три метода:

  1. get_string_errors() - возвращает все сообщения об ошибках в виде строки
  2. get_array_errors() - возвращает все сообщения в виде массива, где в качестве ключа используется имя поля, а в качестве значенияописание ошибки для этого поля.
  3. 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);

Обычно данный метод вызываетя для очистки формы, при успешной обработке формы.

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

Оцените эту статью:



Похожие статьи
Интересно почитать

    Получать новые материалы этого сайта на свой email адрес?

    Отправлять мне комментарии по эл. почте?

Простая CRM

Нашли ошибку в тексте

Система Orphus
https://biznesguide.ru/coding/146.html
3,97 из 5 на основе 23 оценок.