Формы быстро показывают, зачем 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 мало
Что открыть дальше
- PHP с нуля: первый файл и вывод на страницу — если PHP и HTML еще смешиваются.
- Массивы в PHP: обычные, ассоциативные и foreach — формы часто дают массивы данных.
- PHP и MySQL через PDO: первая база без SQL-инъекций — следующий шаг после обработки POST.
- Сессии и cookies в PHP: логин без лишней магии — когда форма станет логином.



