Закрыть
 

Скидка 30% только для веб разработчиков!
Вы зашли к нам с Яндекса? Только для посетителей с Яндекса действует промо код на скидку в 10%!
Устали от текущего хостера? Мы перенесем сайты бесплатно и добавим +50% к первому платежу
БЕССРОЧНЫЙ SSL сертификат! Получи его НАВСЕГДА, всего за 800 руб. !
Для всех доменов. Автоматическое продление. Выделенный Айпи(IP) покупать уже не нужно!

Отличное место для Вашего сайта
Более 17 лет с Вами
О компании
Документы
Оформление заказа - Регистрация
Партнерская программа
Ускорение сайта
Тарифные планы | Домены | VPS | Вечный тариф
База знаний



Раздел: Сниппеты PHP
Проверка формы

Для проверки формы можно использовать функцию приведенную ниже. Функция проверяет заполнены ли требуемые заполнения поля, проверяет типы полей, и очищает данные в форме от 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 адресом'
    




Ответ не помог? Задайте вопрос тех. поддержке
Все о редиректах
Отзывы от клиентов