В предыдущем уроке, мы получали данные от формы, а теперь мы будем проверять на корректность вводимых данных, так как если создать форму без такой проверки, то "плохие" пользователи могут навредить вашему сайту.

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-сущности ('&' преобразуется в '&amp;' и т.д.)

Дальше, создадим функцию для проверки длинны строки:

<?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 "Заполните пустые поля";
}
?>

Если все произошло успешно, то мы увидим сообщение "Спасибо за сообщение"

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

Посмотреть исходники