Правильна обробка HTML форми в PHP
Окрім статичної інформації в мережі інтернет на сторінках сайтів дуже часто можна зустріти форми для надсилання даних: контакти, реєстрація, авторизація та інші.

Розберемо як правильно обробити HTML форму за допомогою PHP. На сьогоднішній день використовують Jquery та інші фреймворки, за допомогою яких можна відправляти дані без перезавантаження сторінки та моментально повертати результат, але іноді необхідно виконати все у чистому вигляді, що ми й зробимо.
Ще в далекі студентські роки, десь 2010 рік, мій друг продемонстрував мені процес відправлення даних (ще й оригінальний лист зберігся):

Після значного вдосконалення можна виділити такі переваги даної логіки реалізації обробки HTML форми PHP.
- Після заповнення полів форми з помилками користувачеві буде виведено помилку, але ці форми зберігаються для наступного виправлення.
- Після правильної оправки даних користувачеві буде виведено повідомлення про успішне завершення операції.
- Всі дані проходять процедуру перевірки та обробки, що дозволяє убезпечити сайт від злому.
- Механізм відправлення використовує сесії, а після відправлення всі дані із сесій видаляються.
Опишемо логіку скрипта:
Опишемо принцип роботи:
1. Стартуємо сесію та оголошуємо функцію обробки вхідних даних Session_input, яка перетворює спеціальні символи в HTML-сутності (Htmlspecialchars) та повертає рядкове значення змінної (Strval).
2. Перевіряємо змінну сесії $_SESSION['send'], якщо вона існує - значить дані надіслано правильно і необхідно вивести користувачеві повідомлення про це. Після виведення повідомлення видаляємо всі змінні сесії.
3. Перевіряємо натискання кнопки $_POST['submit'], яка надсилає дані серверу. Якщо дані надіслані, обробляємо дані та виконуємо необхідні перевірки. Якщо виявлена помилка - перезавантажуємо сторінку та виводимо її, інакше створюємо змінну сесії $_SESSION['send'] та перезавантажуємо сторінку.
4. Якщо користувач нічого не робив – виводимо форму відправлення даних HTML.
Також слід зазначити, що у прикладі використовується одне поле під назвою Str. Можна додавати скільки завгодно полів, але з кожним полем необхідно додавати їх до функцій Unset та виконувати відповідні перевірки. Також всю назву полів необхідно додавати у функцію обробки вхідних даних:

Розберемо як правильно обробити HTML форму за допомогою PHP. На сьогоднішній день використовують Jquery та інші фреймворки, за допомогою яких можна відправляти дані без перезавантаження сторінки та моментально повертати результат, але іноді необхідно виконати все у чистому вигляді, що ми й зробимо.
Ще в далекі студентські роки, десь 2010 рік, мій друг продемонстрував мені процес відправлення даних (ще й оригінальний лист зберігся):

Після значного вдосконалення можна виділити такі переваги даної логіки реалізації обробки HTML форми PHP.
- Після заповнення полів форми з помилками користувачеві буде виведено помилку, але ці форми зберігаються для наступного виправлення.
- Після правильної оправки даних користувачеві буде виведено повідомлення про успішне завершення операції.
- Всі дані проходять процедуру перевірки та обробки, що дозволяє убезпечити сайт від злому.
- Механізм відправлення використовує сесії, а після відправлення всі дані із сесій видаляються.
Опишемо логіку скрипта:
<?php
// Стартуємо сесію (дані перебувають у змінних сесії)
session_start();
// Функція обробки вхідних даних
function session_input() {
$arg_list = func_get_args();
foreach ($arg_list as $key) {
$_SESSION[$key] = htmlspecialchars(trim(strval(@$_POST[$key])), ENT_QUOTES);
}
}
// Успішне надсилання даних
if (isset($_SESSION['send']) && $_SESSION['send'] == 'success') {
echo 'Дякую!';
// Видаляємо дані сесії:
unset( $_SESSION['send'], $_SESSION['error'], $_SESSION['str'] );
} else {
// Якщо користувач надіслав дані
if (isset($_POST['submit'])) {
// Обробляємо вхідні дані
session_input('str');
// Змінна, у якій зберігається помилка
$_SESSION['error'] = '';
// Перевірка вхідних даних
if (mb_strlen($_SESSION['str']) < 1 || mb_strlen($_SESSION['str']) > 5 ) {
$_SESSION['error'] .= 'Помилка!';
}
// Якщо помилок не виявлено, перезавантажуємо сторінку
if (!empty($_SESSION['error'])) {
exit(header('Location: http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']));
}
// Виконуємо код
// ...
// Створюємо змінну сесію з успішним результатом
// і перезавантажуємо сторінку
$_SESSION['send'] = 'success';
exit(header('Location: http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'])));
} else {
// Інакше виводимо форму відправлення даних
echo isset($_SESSION['error']) ? '<div class="warning">'.$_SESSION['error'].'</div>' : '';
echo '
<form action="" method="post">
<input type="text" name="str" value="'.(isset($_SESSION['str']) ? $_SESSION['str'] : '').'" />
<input type="submit" name="submit" value="Надіслати" />
</form>';
// Видаляємо дані сесії:
unset($_SESSION['send'], $_SESSION['error'], $_SESSION['str']);
}
}
?>Опишемо принцип роботи:
1. Стартуємо сесію та оголошуємо функцію обробки вхідних даних Session_input, яка перетворює спеціальні символи в HTML-сутності (Htmlspecialchars) та повертає рядкове значення змінної (Strval).
2. Перевіряємо змінну сесії $_SESSION['send'], якщо вона існує - значить дані надіслано правильно і необхідно вивести користувачеві повідомлення про це. Після виведення повідомлення видаляємо всі змінні сесії.
3. Перевіряємо натискання кнопки $_POST['submit'], яка надсилає дані серверу. Якщо дані надіслані, обробляємо дані та виконуємо необхідні перевірки. Якщо виявлена помилка - перезавантажуємо сторінку та виводимо її, інакше створюємо змінну сесії $_SESSION['send'] та перезавантажуємо сторінку.
4. Якщо користувач нічого не робив – виводимо форму відправлення даних HTML.
Також слід зазначити, що у прикладі використовується одне поле під назвою Str. Можна додавати скільки завгодно полів, але з кожним полем необхідно додавати їх до функцій Unset та виконувати відповідні перевірки. Також всю назву полів необхідно додавати у функцію обробки вхідних даних:
session_input('name1', 'name2', 'name3'); 