Формы в PHP: GET, POST и первая обработка

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

Это первый шаг к обратной связи, заявкам, фильтрам, личным кабинетам и админкам

Что получится в конце

Страница покажет форму:

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

После отправки PHP выведет:

Привет, Алия!

Создаем проект

mkdir php-form
cd php-form

Создайте index.php:

<?php
$name = $_POST['name'] ?? '';
$safeName = htmlspecialchars($name, ENT_QUOTES, 'UTF-8');
?>

<!doctype html>
<html lang="ru">
<head>
    <meta charset="utf-8">
    <title>Форма PHP</title>
</head>
<body>
    <form method="post">
        <label>
            Ваше имя:
            <input name="name" value="<?= $safeName ?>">
        </label>
        <button type="submit">Отправить</button>
    </form>

    <?php if ($name !== ''): ?>
        <p>Привет, <?= $safeName ?>!</p>
    <?php endif; ?>
</body>
</html>

Запустите:

php -S localhost:8000

Откройте http://localhost:8000, отправьте форму и проверьте результат

Что делает method="post"

Атрибут:

method="post"

говорит браузеру отправить данные формы в теле HTTP-запроса. В PHP эти данные доступны в массиве $_POST

Поле:

<input name="name">

создает ключ name. Поэтому в PHP мы читаем:

$_POST['name']

Если забыть name у поля, PHP не получит значение

Зачем нужен ?? ''

Строка:

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

означает: если $_POST['name'] существует, возьми его; иначе используй пустую строку

При первом открытии страницы форма еще не отправлена, поэтому $_POST['name'] отсутствует. Без ?? '' легко получить предупреждение про undefined array key

Безопасный вывод через htmlspecialchars

Нельзя выводить пользовательский ввод как есть:

<p>Привет, <?= $name ?>!</p>

Пользователь может отправить HTML или JavaScript. Для вывода в HTML используем:

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

И выводим уже безопасное значение:

<?= $safeName ?>

Это не «паранойя», а базовая гигиена PHP-страниц

GET и POST

GET отправляет данные в адресной строке:

/index.php?name=Алия

В PHP это $_GET['name']. GET хорош для фильтров, поиска, страниц каталога, где ссылку можно сохранить и отправить

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

Для нашей формы имени можно было использовать и GET, но для первой обработки формы POST ближе к реальным сценариям

Добавляем простую проверку

Сделаем сообщение, если имя пустое:

<?php if ($_SERVER['REQUEST_METHOD'] === 'POST' && trim($name) === ''): ?>
    <p>Введите имя.</p>
<?php elseif ($name !== ''): ?>
    <p>Привет, <?= $safeName ?>!</p>
<?php endif; ?>

$_SERVER['REQUEST_METHOD'] помогает понять, была ли форма отправлена. Иначе ошибка «Введите имя» появлялась бы сразу при первом открытии страницы

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

Undefined array key. Вы обращаетесь к $_POST['name'], когда ключа нет. Используйте ?? '' или проверку isset

Форма отправляется, но PHP ничего не видит. Проверьте method, name у input и адрес, на который отправляется форма

В браузере появляется HTML из введенного текста. Значение выведено без htmlspecialchars

POST путается с GET. Если форма method="get", данные будут в $_GET, а не в $_POST

Что может быть еще интересно по этой теме

Нужно ли сохранять форму в базу сразу? Нет. Сначала научитесь безопасно принимать и выводить данные, потом переходите к PDO и MySQL

htmlspecialchars защищает от SQL-инъекций? Нет. Он защищает HTML-вывод. Для SQL нужны prepared statements

Можно ли отправлять форму без перезагрузки страницы? Да, через JavaScript и fetch, но PHP-обработка на сервере все равно понадобится

Что делать с email и телефоном? Валидировать отдельно: пустота, формат, длина, допустимые символы. Одного htmlspecialchars мало

Что открыть дальше

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

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