пятница, 30 декабря 2011 г.

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

Класс для проверки входных данных предназначем для проверки произвольных данных на соответствие зпданным условиям. Он может использоваться для проверки форм как дополнительный инструмент (фаза проверки на стороне сервера).
При этом я заранее предполагаю, что "полноценная проверка" будет проводится на стороне клиента.
Создание класса
$check = new check('check/test_check', 'en', true);
  check/test_check - Нахождение файла настроек (config/check/test_check.php)
  en - локаль (для проверки дат и других региональных данных)
  true - проверять ли все входные данные. Если проверяются не все данные (значение false) - ф-я check() возвращает значение true или false. Если проверяеются все данные - ф-я check() за место false возвращает массив значений "array(field => return_value, ...)". 

Проверка осуществляется ф-ей check():
$res = $check->check($input_data);

  $input_data - входные данные



Стандартные ф-и проверки
  function not_empty($value)
   - Проверка на пустое значение 
  function is_equal($value, $eq_value)
   - Проверка на  равенство значению
  function is_array($value)
   - Является ли массивом
  function is_float($value)
   - Является ли числом дробным
  function is_int($value)
   - Является ли числом целым
  function is_num($value)
   - Является ли числом
  function value_between($value, $min, $max)
   - Значение в границах диапазона
  function value_less($value, $max)
   - Значение меньше чем
  function length_greater($value, $min)
   - Значение больше чем
  function is_url($value)
   - Является ли URL
  function is_email($value)
   - Является ли EMAIL
  function is_date($value)
   - Является датой ли (используются региональные настройки)
  function is_time($value)
   - Является ли временем (используются региональные настройки)
  function is_datetime($value)
   - Является ли датовременем (используются региональные настройки)
Дополнительные проверки
Дополнительное поле добавляется ф-ей add_rule
add_rule('название поля', $lambda_function, "Сообщение при ошибке'");
 - $lambda_function лямбда - функция (PHP 5.3+) возвращаемое значение: true/false
Файл настроек
Файл настроек класса check является стандартным файлом настроек, значения индексов являются массивом из трёх элементов:
1)Название ф-и проверки
2)Дополнительный параметр (если д.п. является другое поле, тогда оно обозначается следующим образом: '@@название_поля'). Параметр опциональный.
3)Возвращаемое значение при ошибке. Если не указано - возвращается false. Параметр опциональный.
 * Названия полей могут иметь префиксы (_) в начале и конце (чтобы можно было повесить несколько проверок на одно поле)

Пример файла настроек:
<?php
$form = array(
'email' => array('not_empty', '', 'email is emty'),
'email_' => array('is_email', '', 'email is not email'),
'pass' => array('not_empty', '', 'password is emty'),
'pass_' => array('length_greater', 4, 'password must be greater than 4 characters'),
'pass_confirm' => array('is_equal', '@@pass', 'Passwords does not match'),
'phone' => array('not_empty', '', 'phone is emty'),
'phone_' => array('length_greater', 4, 'phone must be greater than 4 characters'),
'firstname' => array('not_empty', '', 'firstname is emty'),
'firstname_' => array('length_greater', 4, 'firstname must be greater than 4 characters'),
'secondname' => array('not_empty', '', 'secondname is emty'),
'secondname_' => array('length_greater', 4, 'secondname must be greater than 4 characters'),
'bdate' => array('not_empty', '', 'Birthdate is emty'),
'bdate_' => array('is_date', '', 'Birthdate is not date'),
'address' => array('not_empty', '', 'address is emty'),
  'address_' => array('length_greater', 9, 'address must be greater than 9 characters')
);
?>


Пример:
if(count($_POST) > 0) {
    $check = new check('check/test_check, 'en', true);
    $function = function($custom) { return( $custom == 'qwerty' ); };
    $check->add_rule('custom', $function, "Value must be equal 'qwerty'");
    $res = $check->check($_POST);
    if($res === true) {
        print "Check OK";
    }
    else {
        print print_r($res); 
    }
}

Комментариев нет:

Отправить комментарий