У попередньому уроці, ми отримували дані від форми, а тепер ми будемо перевіряти на коректність введення даних, оскільки якщо створити форму без такої перевірки, то “погані” користувачі можуть нашкодити вашому сайту.
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 – сутності (‘&’перетворюється в’ &’ і т. д.)
Далі, створимо функцію для перевірки довжини рядка:
<?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 "Заповніть порожні поля"; } ?>
Якщо все відбулося успішно, то ми побачимо повідомлення “Дякуємо за повідомлення!”
Ця перевірка не ідеальна, оскільки не вказує на поля, які заповнені неправильно, також повідомлення про помилки дуже загальні.