В предыдущем уроке, мы получали данные от формы, а теперь мы будем проверять на корректность вводимых данных, так как если создать форму без такой проверки, то «плохие» пользователи могут навредить вашему сайту.
1. Давайте используем ту часть кода, где мы получили данные из формы:
<?php
$name = $_POST['name'];
$surname = $_POST['surname'];
$email = $_POST['email'];
$message = $_POST['message'];
?>
2. Теперь нам нужно проверить переданные нам данные. Чтобы не писать один и тот же код, давайте создадим нескольно функций для проверки.
Сначала создадим функцию для очистки данных от HTML и PHP тегов:
<?php
function clean($value = "") {
$value = trim($value);
$value = stripslashes($value);
$value = strip_tags($value);
$value = htmlspecialchars($value);
return $value;
}
?>
Здесь, мы использовали функцию trim
для удаления пробелов из начала и конца строки.
Функция stripslashes
нужна для удаления экранированных символов («Ваc зовут O\’reilly?» => «Вас зовут O’reilly?»).
Функция strip_tags
нужна для удаления HTML и PHP тегов. Последня функция — htmlspecialchars
преобразует специальные символы в HTML-сущности (‘&’ преобразуется в ‘&’ и т.д.)
Дальше, создадим функцию для проверки длинны строки:
<?php
function check_length($value = "", $min, $max) {
$result = (mb_strlen($value) < $min || mb_strlen($value) > $max);
return !$result;
}
?>
Здесь, мы использовали функцию mb_strlen
для проверки длинны строки. Первый параметр, $value
это строка, которую нужно проверить, второй параметр $min
минимально допустимая длинна строки, третий параметр $max
— максимально допустимая длинна. Если длинна строки будет удовлетворительна, то функция вернет TRUE иначе FALSE.
3. Нам нужно «прогнать» переменные через эти функции:
<?php
$name = clean($name);
$surname = clean($surname);
$email = clean($email);
$message = clean($message);
if(!empty($name) && !empty($surname) && !empty($email) && !empty($message)) {
...
}
?>
Если значения не пустые (проверили с помощью функции empty
), то можно продолжать проверку дальше:
<?php
if(!empty($name) && !empty($surname) && !empty($email) && !empty($message)) {
$email_validate = filter_var($email, FILTER_VALIDATE_EMAIL);
if(check_length($name, 2, 25) && check_length($surname, 2, 50) && check_length($message, 2, 1000) && $email_validate) {
...
}
}
?>
Если длинна значений переменных нас устраивает, то можем продолжать. Также, мы использовали функцию filter_var
с параметром FILTER_VALIDATE_EMAIL
для валидации электронного адреса.
4. Давайте добавим сообщение об успешности операции, если данные прошли все проверки.
<?php
if(!empty($name) && !empty($surname) && !empty($email) && !empty($message)) {
$email_validate = filter_var($email, FILTER_VALIDATE_EMAIL);
if(check_length($name, 2, 25) && check_length($surname, 2, 50) && check_length($message, 2, 1000) && $email_validate) {
echo "Спасибо за сообщение";
}
}
?>
4. В конце нам нужно добавить сообщения для уведомления о том, что данные не прошли проверку.
<?php
if(!empty($name) && !empty($surname) && !empty($email) && !empty($message)) {
$email_validate = filter_var($email, FILTER_VALIDATE_EMAIL);
if(check_length($name, 2, 25) && check_length($surname, 2, 50) && check_length($message, 2, 1000) && $email_validate) {
echo "Спасибо за сообщение";
} else {
echo "Введенные данные некорректные";
}
} else {
echo "Заполните пустые поля";
}
?>
Если все произошло успешно, то мы увидим сообщение «Спасибо за сообщение»