POST-запрос в PHP: как принять данные формы

Короткий ответ: POST-запрос в PHP принимают через массив $_POST. Обычно HTML-форма отправляет данные методом post, PHP проверяет $_SERVER['REQUEST_METHOD'], забирает значения из $_POST, валидирует их и только потом что-то сохраняет, отправляет или выводит

POST используют, когда пользователь отправляет данные: форму обратной связи, регистрацию, комментарий, заявку, поиск с приватными параметрами или настройки профиля

Простая форма

Создайте файл contact.php

<?php

$message = '';

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

    if ($name === '' || $email === '') {
        $message = 'Заполните имя и email';
    } else {
        $safeName = htmlspecialchars($name, ENT_QUOTES, 'UTF-8');
        $safeEmail = htmlspecialchars($email, ENT_QUOTES, 'UTF-8');

        $message = 'Спасибо, ' . $safeName . '. Мы ответим на ' . $safeEmail;
    }
}
?>

<!doctype html>
<html lang="ru">
<head>
    <meta charset="utf-8">
    <title>POST-запрос в PHP</title>
</head>
<body>
    <?php if ($message !== ''): ?>
        <p><?php echo $message; ?></p>
    <?php endif; ?>

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

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

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

Откройте файл через локальный сервер, заполните форму и отправьте. PHP получит данные в $_POST

Почему нужна проверка REQUEST_METHOD

Файл открывается и обычным GET-запросом, когда пользователь просто заходит на страницу. Поэтому обработку формы нужно запускать только после отправки

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Обрабатываем форму
}

Без этой проверки код может пытаться читать данные, которых еще нет

Как получить конкретное поле

Поле формы связано с PHP через атрибут name

<input type="text" name="username">

В PHP значение будет здесь

$username = $_POST['username'] ?? '';

Если в HTML забыть name, поле не попадет в $_POST

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

Пользователь может отправить HTML или скрипт как обычный текст. Поэтому перед выводом данные нужно экранировать

$safeName = htmlspecialchars($name, ENT_QUOTES, 'UTF-8');
echo $safeName;

Это не заменяет всю безопасность, но защищает вывод на страницу от очевидной XSS-ошибки

POST и редирект после формы

После успешной обработки часто делают редирект, чтобы пользователь не отправил форму повторно при обновлении страницы

<?php

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

    if ($name !== '') {
        header('Location: /thanks.php');
        exit;
    }
}

Это называется схемой “POST, затем redirect”. Она особенно полезна для заявок, регистрации и оплаты

Мини-практика

Добавьте в форму поле message, проверьте, что оно не пустое, и выведите сообщение Заявка принята. Затем попробуйте отправить пустую форму и убедитесь, что PHP показывает ошибку, а не делает вид, что все прошло успешно

Частые ошибки

Ставят method="get" вместо method="post" Тогда данные окажутся в $_GET, а не в $_POST

Забывают name у input Без name поле не отправится на сервер

Не проверяют пустые значения Форма может быть отправлена с пустыми строками

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

Что почитать дальше по PHP

Если нужен общий маршрут по теме, откройте рубрику PHP. Для соседних задач пригодятся эти разборы:

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x