<MyRusakov.ru />

Разработчик игр на Unreal Engine

Разработчик игр на Unreal Engine

Этот комплект с нуля всего за 7 месяцев сделает Вас Unreal-разработчиком. И при этом учиться достаточно 1 час в день.

Начнёте Вы с основ программирования, постепенно перейдя к C++. Затем очень подробно изучите Unreal Engine, и после научитесь программировать на C++ в Unreal Engine. В конце создадите крупный проект на C++ в Unreal Engine для своего портфолио.

Комплект содержит:

- 416 видеоуроков

- 95 часов видео

- 1024 задания для закрепления материала из уроков

- 3 финальных тестирования

- 4 сертификата

- 12 Бонусных курсов

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Обработка форм в PHP: GET, POST, проверка данных и защита от XSS

Обработка форм в PHP: GET, POST, проверка данных и защита от XSS

Поисковый запрос, под который подготовлена статья: «обработка форм в PHP POST пример». Если вы только начинаете писать динамические сайты, формы — идеальная тема для практики: через них пользователь отправляет имя, email, комментарии, данные заказа или параметры фильтрации.

GET и POST: что выбрать для формы

В PHP данные формы обычно приходят двумя способами:

  • GET — данные попадают в адресную строку. Подходит для поиска, фильтров, пагинации.
  • POST — данные отправляются в теле запроса. Подходит для регистрации, комментариев, заявок, отправки сообщений.

Пример GET-формы поиска:

<form method="get" action="search.php">
    <input type="text" name="q" placeholder="Что найти?">
    <button type="submit">Искать</button>
</form>

После отправки адрес может выглядеть так: search.php?q=php. Для формы обратной связи лучше использовать POST.

Минимальная POST-форма

Создадим файл contact.php. В нём будет и HTML-форма, и PHP-обработка. Для учебного примера это удобно, хотя в больших проектах код обычно разделяют.

<form method="post" action="">
    <label>
        Имя:
        <input type="text" name="name">
    </label>

    <label>
        Email:
        <input type="email" name="email">
    </label>

    <label>
        Сообщение:
        <textarea name="message"></textarea>
    </label>

    <button type="submit">Отправить</button>
</form>

Теперь добавим обработку. Важно проверять метод запроса, чтобы код выполнялся только после отправки формы.

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $name = $_POST['name'] ?? '';
    $email = $_POST['email'] ?? '';
    $message = $_POST['message'] ?? '';

    echo 'Форма отправлена';
}
?>

Оператор ?? помогает избежать предупреждения, если поля в запросе нет.

Почему нельзя сразу выводить данные пользователя

Главная ошибка новичков — брать значение из $_POST и сразу выводить его на страницу. Пользователь может отправить не обычный текст, а HTML или JavaScript-код.

<?php
// Плохо: потенциальная XSS-уязвимость
echo $_POST['name'];
?>

Для безопасного вывода используйте htmlspecialchars:

<?php
function e(string $value): string
{
    return htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
}

echo e($_POST['name'] ?? '');
?>

Эта функция превращает опасные символы вроде <, > и кавычек в безопасные HTML-сущности.

Полный пример: форма с проверкой и ошибками

Ниже практический пример обработки формы в PHP: очищаем пробелы, проверяем обязательные поля, валидируем email и безопасно возвращаем значения в форму.

<?php
function e(string $value): string
{
    return htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
}

$name = '';
$email = '';
$message = '';
$errors = [];
$success = false;

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $name = trim($_POST['name'] ?? '');
    $email = trim($_POST['email'] ?? '');
    $message = trim($_POST['message'] ?? '');

    if ($name === '') {
        $errors['name'] = 'Введите имя';
    } elseif (mb_strlen($name) < 2) {
        $errors['name'] = 'Имя должно быть не короче 2 символов';
    }

    if ($email === '') {
        $errors['email'] = 'Введите email';
    } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $errors['email'] = 'Введите корректный email';
    }

    if ($message === '') {
        $errors['message'] = 'Введите сообщение';
    } elseif (mb_strlen($message) < 10) {
        $errors['message'] = 'Сообщение должно быть не короче 10 символов';
    }

    if (!$errors) {
        // Здесь можно сохранить данные в БД или отправить письмо
        $success = true;

        $name = '';
        $email = '';
        $message = '';
    }
}
?>

<?php if ($success): ?>
    <p>Спасибо! Сообщение отправлено.</p>
<?php endif; ?>

<form method="post" action="">
    <p>
        <label>Имя</label><br>
        <input type="text" name="name" value="<?= e($name) ?>">
        <?php if (isset($errors['name'])): ?>
            <small><?= e($errors['name']) ?></small>
        <?php endif; ?>
    </p>

    <p>
        <label>Email</label><br>
        <input type="email" name="email" value="<?= e($email) ?>">
        <?php if (isset($errors['email'])): ?>
            <small><?= e($errors['email']) ?></small>
        <?php endif; ?>
    </p>

    <p>
        <label>Сообщение</label><br>
        <textarea name="message"><?= e($message) ?></textarea>
        <?php if (isset($errors['message'])): ?>
            <small><?= e($errors['message']) ?></small>
        <?php endif; ?>
    </p>

    <button type="submit">Отправить</button>
</form>

Защита от повторной отправки формы

Если пользователь обновит страницу после POST-запроса, браузер может предложить отправить данные повторно. Часто используют паттерн Post/Redirect/Get: после успешной обработки делают редирект.

<?php
if (!$errors) {
    // Сохранение данных, отправка письма и т.д.
    header('Location: contact.php?success=1');
    exit;
}
?>

А сообщение об успехе можно показать по параметру success.

Базовая защита от CSRF

CSRF — атака, при которой пользователя заставляют отправить форму без его намерения. Для защиты добавляют токен. Это уже следующий шаг, но полезно знать его с самого начала.

<?php
session_start();

if (empty($_SESSION['token'])) {
    $_SESSION['token'] = bin2hex(random_bytes(32));
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $token = $_POST['token'] ?? '';

    if (!hash_equals($_SESSION['token'], $token)) {
        die('Некорректный токен формы');
    }
}
?>

<input type="hidden" name="token" value="<?= e($_SESSION['token']) ?>">

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

  • Всегда проверяйте $_SERVER['REQUEST_METHOD'].
  • Используйте trim для текстовых полей.
  • Не доверяйте данным из $_POST, даже если в HTML стоит required.
  • Для вывода данных применяйте htmlspecialchars.
  • После успешной отправки используйте редирект, чтобы избежать повторного POST.
  • Для важных действий добавляйте CSRF-токен.

Если хотите не просто разбирать отдельные примеры, а последовательно собрать полноценный сайт с формами, базой данных, авторизацией и практикой безопасности, посмотрите курс «PHP и MySQL с нуля до уверенной разработки» — он хорошо дополняет эту тему.

Итог

Обработка форм в PHP состоит из нескольких обязательных шагов: принять данные, проверить их, безопасно вывести ошибки, выполнить нужное действие и защититься от типичных угроз. Даже простая форма обратной связи должна учитывать XSS, повторную отправку и некорректные значения. Освоив этот шаблон, вы сможете уверенно переходить к регистрации, личным кабинетам и работе с базой данных.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (https://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: https://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: https://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.