Проверка заполнения поля формы php

PHP Формы — Проверка имени, E-mail и URL

В данной статье, мы рассмотрим возможности PHP проверить, корректно ли в форме указан адрес электронной почты (email), имя пользователя и URL-адрес.

Проверка валидности имени на PHP

В приведенном ниже коде показан простой способ проверки валидности введённого пользователем имени. Согласно регулярке в поле name можно вводить только латинские буквы, дефисы, апострофы и пробелы. Если значение поля имени не соответствует шаблону, то в переменную $nameErr сохраним сообщение об ошибке:

Примечание: Функция preg_match() ищет в строке $name шаблон, возвращая true , если шаблон существует, и false , если данные в строке не соответсвуют шаблону.

Но что если нужно, чтобы имя было ТОЛЬКО на латинице или ТОЛЬКО на кирилице и ограничить длину до 30 символов? Например, для полных имён типа «Максим Максимов-Суханов» или «Maxim Maximov-Sukhanov», естественно только на одном из языков регулярное выражение примет следующий вид (бонусом можно писать украинские имена):

или более строгий вариант выражения без прочих символов и в котором первая буква строки должна быть в верхнем регистре, а все остальные в нижнем:

Примечание: Не забывайте про букву «Ё», которая не входит в диапазон «А-Я» и её нужно указывать отдельно!

Проверка правильности email на PHP

Как известно email состоит из двух основных частей — username@hostname. Локальная часть email-адреса — это то, что перед знаком «@»(ASCII-код 64), а часть после знака — это домен получателя. Локальная часть может иметь длину до 64 символов, а имя домена может содержать не более 253 символов.

Читайте также:  Delete python version ubuntu

Локальная часть может включать прописные и строчные латинские буквы (A – Z, a – z) (ASCII: 65–90, 97–122), цифры от 0 до 9 (ASCII: 48–57), специальные символы: # — _ ~! $ & ‘() * +,; =: и %20, точка(.), ASCII 46, при условии, что она не является первым или последним символом, а также при условии, что она не идет последовательно (например, Max..Fax@example.com не допускается).

Доменная часть email-адреса должна соответствовать строгим правилам — соответствовать требованиям к имени хоста, состоящему из букв, цифр, дефисов и точек. Кроме того, доменная часть может быть литералом IP-адреса, который заключается в квадратные скобки [] , но это редко встречается.

Реализуем проверку email разложив её на сосотавляющие, алгоритм которых следует предписаниям стандарта RFC 2822:

$email = test_input($_POST[«email»]);
$user = ‘[a-zA-Z0-9_\-\.\+\^!#\$%&*+\/\=\?`\|\~\’]+’; // локальная часть
$domain = ‘(?:(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.?)+’; // домен
$ipv4 = ‘7(\.1)’; // ip-адрес по протоколу ipv4
$ipv6 = ‘[0-9a-fA-F](\:[0-9a-fA-F])’; // ip-адрес по протоколу ipv6

if (!preg_match(«/^$user@($domain|(\[($ipv4|$ipv6)\]))$/», $email) $emailErr = «Некорректно введён email»;
>
?>

Данная регулярка удобна тем, что шаблоны для разных частей формата email-адреса объявляются отдельно. Валидацию пройдут email не только с буквенными именами почтового домена, но и почтовым сервером, представленным в виде ip адреса.

Главный минус этой регулярного выражения в том, что его нужно постоянно корректировать в соответствие изменениям в названиях email-адресов. Например, домены с русскими именами в зоне «.рф» регулярка выше уже не пропустит.

Начиная с PHP 5.2, появилась возможность выполнить эту проверку встроенной функцией PHP filter_var() . Вот как это делается с её помощью:

$email = test_input($_POST[«email»]);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) $emailErr = «Некорректно введён email»;
>
?>

Рекомендуем использовать именно этот способ проверки email-адреса, так как сегодня и в будущем вы будете уверены, что она работает как нужно. Разработчики языка PHP сами внесут нужные корректировки в новых версиях.

Проверка URL-адреса в PHP

Используя код из приведенного ниже примера, мы можем проверить, содержит ли поле нашей формы действительный URL-адрес. Обратите внимание, что в URL-адресе в этом случае разрешены как слэши (/) , так и дефисы (-) . Если введенное значение не соответствует условиям, то пользователю будет отображено сообщение об ошибке:

Проверка имени, email и URL-адреса в PHP

Объединим все рассмотренные выше все проверки полей ввода в одной форме и напишем следующий код:

Пример

 else < $name = test_input($_POST["name"]); // проверяем, содержит ли имя только буквы и пробелы if (!preg_match("/^[a-zA-Z-' ]*$/",$name)) < $nameErr = "Имя должно содержать только буквы и пробелы"; >> if (empty($_POST["email"])) < $emailErr = "Введите Email"; >else < $email = test_input($_POST["email"]); // проверьте, правильно ли сформирован адрес электронной почты if (!filter_var($email, FILTER_VALIDATE_EMAIL)) < $emailErr = "Неверный формат электронной почты"; >> if (empty($_POST["website"])) < $website = ""; >else < $website = test_input($_POST["website"]); // проверьте, правильность синтаксиса URL-адреса if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|. ;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) < $websiteErr = "Некорректный URL"; >> if (empty($_POST["comment"])) < $comment = ""; >else < $comment = test_input($_POST["comment"]); >if (empty($_POST["education"])) < $educationErr = "Выберите образование"; >else < $education = test_input($_POST["education"]); >?> 

Вы можете попытаться ввести корректные и некорректные данные в представленной выше форме и посмотреть работу, написанного в этом уроке, сценария PHP.

В следующем уроке мы выведем введенные пользователем данные на экран.

Источник

Валидация полей формы на PHP

Валидация формы на PHP

Привет, друг. Помимо того, что можно делать проверки полей формы на JavaScript, необходимо так же делать валидацию на стороне сервера и сейчас мы с вами рассмотрим пример валидации на PHP. Проверять будет такие поля, как номер телефона, email, IP адрес, адрес сайта и др. Всего полей будет 7.

Телеграм-канал serblog.ru

Валидация полей формы на PHP

Принцип действия такой: Мы делаем проверку для поля через специальные условия и если данные, введенные в это поле не проходят валидацию то под этим полем будем выводить сообщение об ошибке. И так под каждым полем. В случае, когда будут провалидированы все поля, мы отправляем форму с ее очисткой и выводим сообщение об успешной отправке. Саму форму можно посмотреть на демо странице:

Форму я сделал на Bootstrap и выглядит она так:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
form action="PHP_SELF"]);?>" method="post">< ?php echo $err['success'] ?> div class="form-group"> label for="">Имя/label> input type="text" class="form-control" name="name" value="" placeholder="Имя не более 10-ти символов"> < ?php echo $err['name'] ?> /div> div class="form-group"> label for="">Возраст/label> input type="text" class="form-control" name="num" value="" placeholder="Двузначное число"> < ?php echo $err['num'] ?> /div> div class="form-group"> label for="">Телефон/label> input type="text" class="form-control" name="phone" value="" placeholder="Номер телефона формата РФ"> < ?php echo $err['phone'] ?> /div> div class="form-group"> label for="">Email/label> input type="text" class="form-control" name="email" value="" placeholder="Emai адрес"> < ?php echo $err['email'] ?> /div> div class="form-group"> label for="">IP адрес/label> input type="text" class="form-control" name="ip" value="" placeholder="IP адрес"> < ?php echo $err['ip'] ?> /div> div class="form-group"> label for="">Сайт/label> input type="text" class="form-control" name="url" value="" placeholder="Адрес сайта"> < ?php echo $err['url'] ?> /div> div class="form-group"> label for="">Сообщение/label> textarea class="form-control" name="text" placeholder="Ваше сообщение"> < ?php echo $_POST['text'] ?> /textarea> < ?php echo $err['text'] ?> /div> button type="submit" class="btn btn-success" name="submit">Отправить/button> /form>

Вывод PHP переменно $err в HTML коде означает вывод ошибок и мы их напишем непосредственно в PHP. Я предстаавлю на ваше обозрение весь код, и уже ниже прокомментирую его.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
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]3\)?[\s\-]?8[\s\-]?6[\s\-]?8$/'; $pattern_name = '/^[А-ЯЁ][а-яё]*$/'; $err = []; $flag = 0; if ($_SERVER['REQUEST_METHOD'] == 'POST'){ if (preg_match($pattern_name, $name)){ $err['name'] = ''; $flag = 1; } if (mb_strlen($name) > 10 || empty($name)){ $err['name'] = ''; $flag = 1; } if (!filter_var($num, FILTER_VALIDATE_INT) || strlen($num) > 2){ $err['num'] = ''; $flag = 1; } if (empty($num)){ $err['num'] = ''; $flag = 1; } if (!preg_match($pattern_phone, $phone)){ $err['phone'] = ''; $flag = 1; } if (empty($phone)){ $err['phone'] = ''; $flag = 1; } if (!filter_var($email, FILTER_VALIDATE_EMAIL)){ $err['email'] = ''; $flag = 1; } if (empty($email)){ $err['email'] = ''; $flag = 1; } if (!filter_var($ip, FILTER_VALIDATE_IP)){ $err['ip'] = ''; $flag = 1; } if (empty($ip)){ $err['ip'] = ''; $flag = 1; } if (!filter_var($url, FILTER_VALIDATE_URL)){ $err['url'] = ''; $flag = 1; } if (empty($url)){ $err['url'] = ''; $flag = 1; } if (empty($text)){ $err['text'] = ''; $flag = 1; } if ($flag == 0){ Header("Location:". $_SERVER['HTTP_REFERER']."?mes=success"); } } if ($_GET['mes'] == 'success'){ $err['success'] = '
Сообщение успешно отправлено!
'
; }
С 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. Пишите ваши комментрии по данной теме.

Источник

Проверка заполнения полей

Проверка поля Name не работает — по идее нужно сдлать так чтобы если одно из полей не заполнено форма «ругалась» и возвращала, но увы. подскажите в каком направлении копать?

Проверка заполнения полей
Добрый день. Подскажите как вывести ошибку, если при вводе данных человек не заполнил одно из полей.

Проверка заполнения необязательных полей формы
у меня есть форма и в ней есть поля, которые к заполнению не обязательы. как мне делать в нимх.

Проверка полей формы на правильность заполнения
В общем есть Landing Page, в нем есть обратные формы связи. В принципе они работают, но хотелось бы.

. if(empty($Name)){ echo "Заполните строку ФИО. "; } else . 

На пустые поля ругаться начало, но вот теперь не хочет проверять количество символов. Условие проверки длины прописываю вот так:

else{ $Name = trim($_POST['Name']); if(iconv_strlen($Name)2)}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
 $hostname = "localhost"; // название/путь сервера, с MySQL $username = "root"; // имя пользователя (в Denwer`е по умолчанию "root") $password = "123456"; // пароль пользователя (в Denwer`е по умолчанию пароль отсутствует, этот параметр можно оставить пустым) $dbName = "exp_b"; // название базы данных $table = "sotr"; $db = mysql_connect ("localhost","root","123456"); mysql_select_db("exp_b",$db); $Name = $_POST['Name']; $Department = $_POST['Department']; $Rank = $_POST['Rank']; $Lognomer = $_POST['Lognomer']; $Avtootvet = $_POST['Avtootvet']; $Avtootvet1 = $_POST['Avtootvet1']; if (empty($Name)) else{ $Name = trim($_POST['Name']); if(iconv_strlen($Name)2)} echo "ВНИМАНИЕ! Не заполнено одно или более полей формы! Поле ФИО_сотрудника не заполнено или введено некорректное значение!
"
; if (empty($Department)) echo "Укажите отдел!
"
; if (empty($Rank)) echo "Укажите должность!
"
; if (empty($Lognomer)) echo "Укажите Логномер!
"
; if (empty($Avtootvet)) echo "Укажите автоответ полностью!
"
; if (empty($Avtootvet1)) echo "Укажите автоответ полностью!
"
; else { $sql = 'INSERT INTO sotr(Name, Department, Rank, Lognomer, Avtootvet, Avtootvet1) VALUES ("'.$Name.'", "'.$Department.'", "'.$Rank.'", "'.$Lognomer.'", "'.$Avtootvet.'", "'.$Avtootvet1.'")'; } if(!mysql_query($sql)) {echo '

Запись не может быть произведена потому что нет доступа к базе данных или форма заполнено некорректно!

'
;} else {echo '

Готово


'
;} ?>

Проблема в том что если при таком условии запись тупо пишется в таблицу даже с пустым полем.

Источник

Оцените статью