[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: класс валидатора форм
Страницы: 1, 2, 3, 4, 5, 6, 7
Игорь_Vasinsky
Очень часто принимаю заказы на создание административных интерфейсов (разнообразных админок). Надоело постоянно писать проверку данных и вывод текста предупреждений в случаях работ с формами.

Решил упростить процесс этого момента.

класс Валидации v.1
  class Validate{
public $mysqli; //идентификатор коннекта к БД
public $value; // value поля
public $param; // тип данных int, float, lenght, regexp
public $pattern = false; //при $param = lenght (min,max) при $param = regexp - паттерн
private $result = array(); //массив с результатом

public function __construct($mysqli){
$this->mysqli = $mysqli;
}

public function validateParams($name, $label, $value, $param, $pattern = false){
switch($param){
case 'int':
if(!is_int($value)){
$result['name'] = $name;
$result['error'] = 'Поле "'.$label.'" должно содержать только цифры';
$result['value'] = htmlspecialchars($value);
}
else{
$result = (int)$value;
}
break;

case 'float':
$value = strtr($value, array(','=>'.'));

if(!is_float($value)){
$result['error'] = 'Поле "'.$label.'" должно содержать десятичную дробь';
$result['value'] = htmlspecialchars($value);
}
else{
$result = (float)$value;
}
break;

case 'regexp' :
if(!preg_match('#'.$pattern.'#iusU', $value)){
$result['error'] = 'Поле "'.$label.'" заполнено не верно';
$result['value'] = htmlspecialchars($value);
}
else{
$result = $this->mysqli->escape_string($value);
}
break;

case 'lenght' :
$lenght = explode(',',$pattern);

if(mb_strlen($value, 'utf-8') < $lenght[0]){
$result['error'] = 'Поле "'.$label.'" должно содержать минимум '.$lenght[0].' символа(ов)';
$result['value'] = htmlspecialchars($value);
$result['lenght'] = mb_strlen($value, 'utf-8');
}
elseif(mb_strlen($value, 'utf-8') > $lenght[1]){
$result['error'] = 'Поле "'.$label.'" должно содержать максимум '.$lenght[1].' символа(ов)';
$result['value'] = htmlspecialchars($value);
$result['lenght'] = mb_strlen($value, 'utf-8');
}
else{
$result = $this->mysqli->escape_string($value);
}
break;
}

return $result;
}
}


в конструктор решил передать идентификатор на коннект с БД, остальные данные как свойства методов - для того чтобы нагляднее работать с объектами.

пример.
  //Создание объекта
$validate = new Validate($mysqli);
//Например логин с критерием от 3-15 символов , отправили phpforum
$name = $validate->validateParams('Логин', $_POST['login'], 'lenght', '3,5');
//Поле номера телефона по маске (xxx)xxx-xx-xx, отправили 2651200
$phone = $validate->validateParams('phone', $_POST['login'], 'regexp', '\([0-9]{3,4}\)[0-9]{3}\-[0-9]{2}\-[0-9]{2}');


в случае успешной проверки возращаются безопасные данные из поля - которые можно слать сразу в БД

string 'phpforum' (length=8)
string '(347)265-12-00' (length=14)


в случае ошибки получаем массивы

array
'error' => string 'Поле "Логин" должно содержать минимум 3 символа(ов)' (length=91)
'value' => string 'p' (length=1)
'lenght' => int 1
array
'error' => string 'Поле "Телефон" заполнено не верно' (length=60)
'value' => string '2651200' (length=7)


прямо под нужным полем можно вывести сообщение

<?=isset($phone['error']) ? $phone['error'] : null;?>



вобщем-то вот.

проверка.. (вообще ещё не додумал этот момент, может дополнительный метод будет ловить массивы - и возращать false... пока не знаю)

if(!is_array($login)) || !is_array($phone){
//Запись в БД
}


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.