Решил упростить процесс этого момента.
класс Валидации 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