04. Работа с формами и сессиями

Что такое форма

Форма — это способ, с помощью которого пользователь отправляет данные на сервер. Это могут быть имя, email, комментарий или пароль.

Когда вы нажимаете кнопку «Отправить», браузер передаёт данные на сервер (где работает PHP) через методы GET или POST.

Форма — это мост между пользователем и вашим серверным кодом.

Простейшая форма


<form method='post'>
  <label>Ваше имя:</label><br>
  <input name='name' placeholder='Введите имя'><br><br>
  <button type='submit'>Отправить</button>
</form>

<?php if (isset($_POST['name'])) { echo 'Привет, ' . htmlspecialchars($_POST['name']); } ?>

Здесь method='post' означает, что данные отправляются скрыто (в теле запроса), а не через адресную строку.

GET и POST — в чём разница

  • GET — данные видны в URL (например: ?name=Анна). Используется для поиска, фильтров.
  • POST — данные передаются скрыто. Используется для форм регистрации, логина и т.д.

Пример с GET


<form method='get'>
  <input name='city' placeholder='Город'>
  <button>Показать</button>
</form>

<?php if (isset($_GET['city'])) { echo 'Ваш город: ' . htmlspecialchars($_GET['city']); } ?>

Валидация данных

Перед тем как обрабатывать данные, нужно их проверить — чтобы не попасть на ошибки и уязвимости.

$name = trim($_POST['name'] ?? '');
if ($name === '') {
  echo 'Имя не может быть пустым';
} else {
  echo 'Здравствуйте, ' . htmlspecialchars($name);
}

Фильтрация email


$email = $_POST['email'] ?? '';
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
  echo 'Email корректен';
} else {
  echo 'Некорректный email';
}

Функции для защиты

  • htmlspecialchars() — предотвращает XSS (подмену HTML-кода).
  • trim() — убирает пробелы в начале и конце.
  • filter_var() — проверяет корректность данных (email, URL, число и т.д.).

Сессии

Сессия — это способ хранить информацию о пользователе между страницами. Например, когда вы вошли в аккаунт, сервер «помнит» вас с помощью сессии.

Как включить сессию


session_start(); // включаем сессии
$_SESSION['user'] = 'admin'; // сохраняем значение

echo 'Пользователь: ' . $_SESSION['user'];

Удаление и завершение сессии


unset($_SESSION['user']); // удалить конкретную переменную
session_destroy(); // завершить всю сессию

Пример: мини-авторизация


<?php
session_start();

if ($_SERVER['REQUEST_METHOD'] === 'POST') { $login = $_POST['login'] ?? ''; $pass = $_POST['password'] ?? '';

if ($login === 'admin' && $pass === '1234') { $_SESSION['user'] = $login; } }

if (isset($_SESSION['user'])) { echo 'Добро пожаловать, ' . $_SESSION['user'] . '! <a href=?logout>Выйти</a>'; if (isset($_GET['logout'])) { session_destroy(); header('Location: '.$_SERVER['PHP_SELF']); } } else { ?> <form method='post'> <input name='login' placeholder='Логин'><br> <input name='password' type='password' placeholder='Пароль'><br> <button>Войти</button> </form> <?php } ?>

Типичные ошибки новичков

  • Забыли session_start() — сессия не работает.
  • Не проверили данные формы — выводит пустые строки или ошибки.
  • Не экранируют HTML — сайт уязвим для XSS.
  • Не закрыли тег form или button.

Практическое задание

  • Создай форму с двумя полями: имя и email. После отправки выведи приветствие и email пользователя.
  • Добавь проверку, что оба поля заполнены и email корректный.
  • Сохрани имя пользователя в сессии и покажи его на другой странице.

Итоги урока

Теперь вы умеете:
  • Создавать и обрабатывать HTML-формы.
  • Использовать GET и POST для передачи данных.
  • Проверять и фильтровать пользовательский ввод.
  • Работать с сессиями для хранения состояния пользователя.