Перевірка даних форми


У попередньому уроці, ми отримували дані від форми, а тепер ми будемо перевіряти на коректність введення даних, оскільки якщо створити форму без такої перевірки, то “погані” користувачі можуть нашкодити вашому сайту.

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 потрібна для видалення екранованих символів (“Вас звуть 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 "Дякуємо за повідомлення!";
     }
}
?>

5. В кінці, нам потрібно додати повідомлення на випадок, якщо дані не пройшли перевірку.

<?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 "Заповніть порожні поля";
}
?>

Якщо все відбулося успішно, то ми побачимо повідомлення “Дякуємо за повідомлення!

Ця перевірка не ідеальна, оскільки не вказує на поля, які заповнені неправильно, також повідомлення про помилки дуже загальні.