Проверка формы
Для проверки формы можно использовать функцию приведенную ниже.
Функция проверяет заполнены ли требуемые заполнения поля, проверяет типы полей, и очищает данные в форме от SQL инъекций и постороннего кода.
В случае нахождения ошибок, функция вернет массив со списком полей, в которых найдены ошибки. В случае отсутствия ошибок, функция вернет массив очищенных данных.
function checkForm($params,$method)
{
/*
$params - Массив параметров/полей формы которые должны быть проверены
Пример:
$params = array(
'name'=>'string',
'lastname'=>'string',
'email'=>'email',
'zipcode'=>'integer'
);
$method - метод отправки формы, POST или GET
*/
if($method == 'POST') $DATA = $_POST;
if($method == 'GET') $DATA = $_GET;
if(empty($DATA)) return FALSE;
$ERR_FIELDS = array(); // массив для хранения названий полей заполненных с ошибками
$i = 0;
foreach($params as $fieldName => $fieldType)
{
if(!isset($DATA[$fieldName]) || empty($DATA[$fieldName]))
{
$ERR_FIELDS[$i]['fieldName'] = $fieldName;
$ERR_FIELDS[$i]['reason'] = 'поле не заполнено';
$i++;
}
else
{
// проверка цифрового поля
if($fieldType == 'integer')
{
if(!is_numeric($DATA[$fieldName]))
{
$ERR_FIELDS[$i]['fieldName'] = $fieldName;
$ERR_FIELDS[$i]['reason'] = 'поле дожно быть числом';
$i++;
}
}
// проверка email
if($fieldType == 'email')
{
if(!filter_var($DATA[$fieldName],FILTER_VALIDATE_EMAIL))
{
$ERR_FIELDS[$i]['fieldName'] = $fieldName;
$ERR_FIELDS[$i]['reason'] = 'поле дожно быть email адресом';
$i++;
}
}
// проверка string
if($fieldType == 'string')
{
$cleanedField = strip_tags($DATA[$fieldName]);
$cleanedField = mysql_escape_string($cleanedField);
$DATA[$fieldName] = $cleanedField;
}
}
}
// формируем ответ
if(count($ERR_FIELDS) == 0)
{
$ANSWER['status'] = '1';
$ANSWER['status-text'] = 'Форма заполнена без ошибок';
$ANSWER['data'] = $DATA;
}
else
{
$ANSWER['status'] = '0';
$ANSWER['status-text'] = 'Форма заполнена с ошибками';
$ANSWER['errors'] = $ERR_FIELDS;
}
return $ANSWER;
}
Пример использования:
// предположим в нашей форме только три поля, укажем их имена и тип
$params = array(
'name'=>'string',
'email'=>'email',
'age'=>'integer'
);
$result = checkForm($params,'POST'); // указываем POST если данные в форме передаются методом POST
if($result['status'] == '0') // если были найдены ошибки
{
// выведем список ошибок
foreach($result[errors] as $error)
{ /* вернем ответ в виде строки "Ошибка в поле email. Поле должно быть email адресом" */
echo 'Ошибка в поле ' . $error['fieldName'] . '. ' . $error['reason'] . '
';
}
}
else
{
echo $result['status-text'];
// делаем что нибудь с данными формы, которые теперь хранятся в очищенном виде в $result[data];
}
Функция возвращает ответы:
// в случае успеха функция вернет массив
$ANSWER['status'] = '1'; // код ответа
$ANSWER['status-text'] = 'Форма заполнена без ошибок';
$ANSWER['data'] = $DATA; // $DATA - массив с очищенными данными формы, вида $DATA['name'], $DATA['lastname'] и т.д
// в случае нахождения ошибок в форме
$ANSWER['status'] = '0'; // код ответа
$ANSWER['status-text'] = 'Форма заполнена с ошибками';
$ANSWER['errors'] = $ERR_FIELDS; // массив с ошибочными полями, имеет формат (см ниже):
// массив с ошибками
$ERR_FIELDS[0]['fieldName']; // будет содержать имя поля в котором ошибка
$ERR_FIELDS[0]['reason']; // поле содержит текст ошибки, например: 'поле дожно быть email адресом'
Ответ не помог? Задайте вопрос
тех. поддержке