Частенько бывает, что необходимо проверить некоторые ключи POST или GET массивов на наличие значений или их существование, минимальную или максимальную длину значения и т.д., и выглядит это примерно так:
<?php
if (!isset($_POST[\'key\'])) echo \'error\';
else $value = $_POST[\'key\'];
if (mb_strlen($_POST[\'key\']) < 3) echo \'error\';
if (mb_strlen($_POST[\'key\']) > 30) echo \'error\';
if (!isset($_POST[\'key_2\'])) echo \'error\';
else $value_2 = $_POST[\'key_2\'];
if (mb_strlen($_POST[\'key_2\']) < 3) echo \'error\';
if (mb_strlen($_POST[\'key_2\']) >30) echo \'error\';
// и т.д.
?>
Поэтому решил наговнокодить следущее)

                        
<?php

class check_input_data {
/**
* Массив замены для вывода текста ошибки
* в соответствии с проверяемым ключом массива
*/
public $errorReplace = array();

/**
* Массив данных, создаваемый методом __set()
* Содержит в качестве ключа имя свойства,
* а значения - переданный массив функций проверки
*/
private $varData = array();

/**
* Массив ошибок
*/
private $errorData = array();

/**
* Тип проверяемого суперглобального массива
*/
private $type;

/**
* Текст ошибки
*/
private $errorString;

/**
* Конструктор класса принимает параметр $type,
* указывающий, какой суперглобальный массив
* необходимо проверить. По-умолчанию POST
*/
public function __construct($type = 'POST') {
$this->type = $type == 'POST' ? 'POST' : 'GET';
return TRUE;
}

/**
* Данный "магический" метод собирает массив $varData
* Если для указанного ключа не передан массив
* функций или передан пустой массив,
* то выбрасывает исключение
*/
public function __set($valueName, $value) {
if (!is_array($value) OR empty($value)) {
throw new Exception('Не передан массив функций проверки для ' . $valueName);
return FALSE;
}
$this->varData[$valueName] = $value;
return TRUE;
}

/**
* Данный метод начинает проверку указанных ключей,
* применяет к ним указанные функции проверки
* и собирает массив ошибок, если они есть
*/
public function startCheck() {
/**
* в данном фрагменте кода я не нашел более простого решения
* перебора массива varData и его значений,
* поэтому использую вложенный цикл
*/
foreach ($this->varData AS $key => $funcArr) {
foreach($funcArr AS $func => $arg) {
/**
* Определение имени метода согласно имени функции,
* полученной из массива функций проверки
*/
$methodName = '__' . $func;
/**
* Проверка существования метода
*/
if (!method_exists('check_input_data', $methodName)) {
throw new Exception('Метод ' . $methodName . ' не существует');
return FALSE;
}
$value = $this->type == 'POST' ? $_POST[$key] : $_GET[$key];
/**
* Вызов метод c использованием переменной функции
*/
if ($this->$methodName($value, $arg) == FALSE) {
/**
* Заполнение массива ошибок.
* Если в массиве замены нет читабельного
* значения ключа проверяемого массива,
* то выводится имя ключа.
*/
$this->errorData[] = str_replace('%field%', isset($this->errorReplace[$key]) ? $this->errorReplace[$key] : $key, $this->errorString);
/**
* Завершение выполнения текущего цикла,
* чтобы предоставить возможность начать проверку
* следующего переданного ключа суперглобального массива
*/
break;
}
}
}
}

/**
* Возврат массива ошибок
*/
public function getErrors() {
return isset($this->errorData) ? $this->errorData : FALSE;
}

/**
* Методы для проверки ключей суперглобального массива,
* имена которых начинаются с двойного нижнего
* подчеркивания, затем идет имя функции, которая
* передается в массиве функций проверки.
* Также определяет строку с текстом ошибки, в которой
* производится замена %field% на имя ключа для вывода ошибки
* Принимают два параметра, первый - значения ключа
* суперглобального массива, второй - параметр (параметры) для функций,
* используемых в методе.
*/
private function __issetField($value, $arg) {
if ($arg == FALSE) return TRUE;
if (isset($value) AND trim($value) != '') return TRUE;
$this->errorString = 'Поле <b>%field%</b> не должно быть пустым.';
return FALSE;
}

private function __maxLength($value, $arg) {
if (mb_strlen($value) > $arg) {
$this->errorString = 'Введено более ' . $arg . ' символов в поле <b>%field%</b>.';
return FALSE;
}
return TRUE;
}

private function __minLength($value, $arg) {
if (mb_strlen($value) < $arg) {
$this->errorString = 'Введено менее ' . $arg . ' символов в поле <b>%field%</b>.';
return FALSE;
}
return TRUE;
}

private function __pregMatch($value, $pattern) {
if (preg_match($pattern, $value)) {
$this->errorString = 'Недопустимые символы в поле <b>%field%</b>.';
return FALSE;
}
return TRUE;
}

}

/**
* Пример использования
* Например с $_POST
*/
$_POST['login'] = '';
$_POST['password'] = '1111#@@';
$_POST['userName'] = 'a';
$_POST['about'] = '1';
try {
$obj = new check_input_data('POST');
/**
* Имена свойств являются ключами
* суперглобального массива, которые необходимо проверить
*
* Массив функций должен быть вида
* ключ - имя метода без двойного подчеркивания
* значение - аргументы, передаваемые методу.
*/

$obj->login = array('issetField' => TRUE, 'maxLength' => 50, 'minLength' => 3, 'pregMatch' => '#[^a-z0-9_]#i');
$obj->password = array('issetField' => TRUE, 'maxLength' => 50, 'minLength' => 3, 'pregMatch' => '#[^0-9]#i');
$obj->userName = array('issetField' => TRUE, 'maxLength' => 50, 'minLength' => 3);
$obj->about = array('minLength' => 5);

// указал несуществующий ключ массива
$obj->something = array('issetField' => TRUE);

// "Забыл" определить замену для строки ошибки ключей about и something
$obj->errorReplace = array('login' => 'Логин', 'password' => 'Пароль', 'userName' => 'Имя пользователя');
$obj->startCheck();
}
catch(Exception $error) {
echo $error->getMessage();
}

if ($obj->getErrors()) {
// Обработка ошибок
.....
// в качестве примера выведу читабельное отображение массива ошибок
print_r($obj->getErrors());
} else {
// код
.....
}

/**
* Данный пример выведет следующее
* Array (
* [0] => Поле <b>Логин</b> не должно быть пустым.
* [1] => Недопустимые символы в поле <b>Пароль</b>.
* [2] => Введено менее 3 символов в поле <b>Имя пользователя</b>.
* [3] => Введено менее 5 символов в поле <b>about</b>.
* [4] => Поле <b>somthing</b> не должно быть пустым.
* )
*/

?>
1 15 0
0

Нет фото
• 23 дек 2013, 17:42


более чем

0

Нет фото
• 23 дек 2013, 13:29


четкий комент *

0

Нет фото
Fallen * 10.22
• 23 дек 2013, 13:24


велосипед *

0

Нет фото
• 23 дек 2013, 13:17


ЭКЗО, уверен что копипаст?

0

Нет фото
• 23 дек 2013, 12:50


-.- балаболить?

писать 100метровый код, который ты скопипастил хз откуда и помоему не сточки не понял - это бред.