Привет, друг. Помимо того, что можно делать проверки полей формы на JavaScript, необходимо так же делать валидацию на стороне сервера и сейчас мы с вами рассмотрим пример валидации на PHP. Проверять будет такие поля, как номер телефона, email, IP адрес, адрес сайта и др. Всего полей будет 7.
Принцип действия такой: Мы делаем проверку для поля через специальные условия и если данные, введенные в это поле не проходят валидацию то под этим полем будем выводить сообщение об ошибке. И так под каждым полем. В случае, когда будут провалидированы все поля, мы отправляем форму с ее очисткой и выводим сообщение об успешной отправке. Саму форму можно посмотреть на демо странице:
Вывод PHP переменно $err в HTML коде означает вывод ошибок и мы их напишем непосредственно в PHP. Я предстаавлю на ваше обозрение весь код, и уже ниже прокомментирую его.
function clear_data($val){$val=trim($val);$val=stripslashes($val);$val=strip_tags($val);$val=htmlspecialchars($val);return$val;}$name= clear_data($_POST['name']);$num= clear_data($_POST['num']);$phone= clear_data($_POST['phone']);$email= clear_data($_POST['email']);$ip= clear_data($_POST['ip']);$url= clear_data($_POST['url']);$text= clear_data($_POST['text']);$pattern_phone='/^(\+7|7|8)?[\s\-]?\(?[489][0-9]{2}\)?[\s\-]?[0-9]{3}[\s\-]?[0-9]{2}[\s\-]?[0-9]{2}$/';$pattern_name='/^[А-ЯЁ][а-яё]*$/';$err=[];$flag=0;if($_SERVER['REQUEST_METHOD']=='POST'){if(preg_match($pattern_name,$name)){$err['name']='<small class="text-danger">Здесь только русские буквы</small>';$flag=1;}if(mb_strlen($name)>10||empty($name)){$err['name']='<small class="text-danger">Имя должно быть не больше 10 символов</small>';$flag=1;}if(!filter_var($num, FILTER_VALIDATE_INT)||strlen($num)>2){$err['num']='<small class="text-danger">Здесь должно быть только двузначное число</small>';$flag=1;}if(empty($num)){$err['num']='<small class="text-danger">Поле не может быть пустым</small>';$flag=1;}if(!preg_match($pattern_phone,$phone)){$err['phone']='<small class="text-danger">Формат телефона не верный!</small>';$flag=1;}if(empty($phone)){$err['phone']='<small class="text-danger">Поле не может быть пустым</small>';$flag=1;}if(!filter_var($email, FILTER_VALIDATE_EMAIL)){$err['email']='<small class="text-danger">Формат Email не верный!</small>';$flag=1;}if(empty($email)){$err['email']='<small class="text-danger">Поле не может быть пустым</small>';$flag=1;}if(!filter_var($ip, FILTER_VALIDATE_IP)){$err['ip']='<small class="text-danger">Формат ip не верный!</small>';$flag=1;}if(empty($ip)){$err['ip']='<small class="text-danger">Поле не может быть пустым</small>';$flag=1;}if(!filter_var($url, FILTER_VALIDATE_URL)){$err['url']='<small class="text-danger">Формат url не верный!</small>';$flag=1;}if(empty($url)){$err['url']='<small class="text-danger">Поле не может быть пустым</small>';$flag=1;}if(empty($text)){$err['text']='<small class="text-danger">Поле не может быть пустым</small>';$flag=1;}if($flag==0){Header("Location:".$_SERVER['HTTP_REFERER']."?mes=success");}}if($_GET['mes']=='success'){$err['success']='<div class="alert alert-success">Сообщение успешно отправлено!</div>';}
function clear_data($val){
$val = trim($val);
$val = stripslashes($val);
$val = strip_tags($val);
$val = htmlspecialchars($val);
return $val;
}
$name = clear_data($_POST['name']);
$num = clear_data($_POST['num']);
$phone = clear_data($_POST['phone']);
$email = clear_data($_POST['email']);
$ip = clear_data($_POST['ip']);
$url = clear_data($_POST['url']);
$text = clear_data($_POST['text']);
$pattern_phone = '/^(\+7|7|8)?[\s\-]?\(?[489][0-9]{2}\)?[\s\-]?[0-9]{3}[\s\-]?[0-9]{2}[\s\-]?[0-9]{2}$/';
$pattern_name = '/^[А-ЯЁ][а-яё]*$/';
$err = [];
$flag = 0;
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
if (preg_match($pattern_name, $name)){
$err['name'] = '<small class="text-danger">Здесь только русские буквы</small>';
$flag = 1;
}
if (mb_strlen($name) > 10 || empty($name)){
$err['name'] = '<small class="text-danger">Имя должно быть не больше 10 символов</small>';
$flag = 1;
}
if (!filter_var($num, FILTER_VALIDATE_INT) || strlen($num) > 2){
$err['num'] = '<small class="text-danger">Здесь должно быть только двузначное число</small>';
$flag = 1;
}
if (empty($num)){
$err['num'] = '<small class="text-danger">Поле не может быть пустым</small>';
$flag = 1;
}
if (!preg_match($pattern_phone, $phone)){
$err['phone'] = '<small class="text-danger">Формат телефона не верный!</small>';
$flag = 1;
}
if (empty($phone)){
$err['phone'] = '<small class="text-danger">Поле не может быть пустым</small>';
$flag = 1;
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)){
$err['email'] = '<small class="text-danger">Формат Email не верный!</small>';
$flag = 1;
}
if (empty($email)){
$err['email'] = '<small class="text-danger">Поле не может быть пустым</small>';
$flag = 1;
}
if (!filter_var($ip, FILTER_VALIDATE_IP)){
$err['ip'] = '<small class="text-danger">Формат ip не верный!</small>';
$flag = 1;
}
if (empty($ip)){
$err['ip'] = '<small class="text-danger">Поле не может быть пустым</small>';
$flag = 1;
}
if (!filter_var($url, FILTER_VALIDATE_URL)){
$err['url'] = '<small class="text-danger">Формат url не верный!</small>';
$flag = 1;
}
if (empty($url)){
$err['url'] = '<small class="text-danger">Поле не может быть пустым</small>';
$flag = 1;
}
if (empty($text)){
$err['text'] = '<small class="text-danger">Поле не может быть пустым</small>';
$flag = 1;
}
if ($flag == 0){
Header("Location:". $_SERVER['HTTP_REFERER']."?mes=success");
}
}
if ($_GET['mes'] == 'success'){
$err['success'] = '<div class="alert alert-success">Сообщение успешно отправлено!</div>';
}
С 1 по 7 стр.
Функция очистки данных
С 9 по 15 стр.
Принимаем данные из формы прогоняя их через функцию
17 стр.
Регулярное выражение для номера телефона в формате РФ
19 стр.
Регулярное выражение для имени (только рус.)
20 стр.
Определяем переменную, как массив ошибок
21 стр.
Специальный флаг. Присвоим ему значение — 0
23 стр.
Проверка, если данные пришли методом POST
С 24 по 27 стр.
Проверка на соответствие регулярному выражению ($name)
С 28 по 31 стр.
Если поле пустое или больше 10 символов — выводим ошибку
С 32 по 35 стр.
Фильтр проверки данных на целое число и длину строки
36 стр.
Проверка поля на пустоту (в коде повторяется)
С 40 по 43 стр.
Проверка на соответствие регулярному выражению ($phone)
С 48 по 51 стр.
Фильтр валидации Email
С 56 по 59 стр.
Фильтр валидации IP
С 64 по 67 стр.
Фильтр валидации URL
С 76 по 78 стр.
Если валидация пройдена
Если валидация всех полей будет пройдена, об этом нам скажет специальный флаг, которому мы в начале установили ноль, то перезагрузим страницу с очисткой формы и добавим к адресу GET-параметр mes и присвоим ему значение success. То есть если 0 — валидация пройдена, если 1 — есть ошибки. И в самом конце с 80 по 82 стр. проверяем, если такой параметр существует, то выводим сообщение об успешной отправке данных. Это один из примеров валидации на PHP и он не единственный верный, но как рабочий вариант вполне пригоден для использования. Через JS и Ajax валидация будет немного по-другому реализована, но общий принцип останется таким же.
Надеюсь, что теперь у вас не возникнет трудностей с валидацией форм на PHP. Пишите ваши комментрии по данной теме.
День добрый!
А как сделать отправку на сервер кода каждой нажатой клавиши, сразу после её нажатия. Обработка будет проходить на сервере.
Через JS получить код клавиш и отправить методом Ajax.