Работа с формами HTML

Предлагаю вашему вниманию серию примеров работы с формами html на php. Примеры рассчитаны на новичков в php, желающих научиться самостоятельно генерировать формы и обрабатывать введенные пользователем результаты.

Пример 1. Отображение формы и обработка полученных данных


<?php
//принятие решения
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
	formShow();
} else {
	formResult();
}
//вывод формы
function formShow() {
	echo '<form action="'.htmlentities($_SERVER['SCRIPT_NAME']).'" method="post">'."\n";
	echo 'Введите имя:<br>'."\n";
	echo '<input type="text" name="name" /><br>'."\n";
	echo '<input type="submit" value="Отправить" />'."\n";
	echo '</form>'."\n";
}
//обработка ввода
function formResult() {
	echo '<form action="'.htmlentities($_SERVER['SCRIPT_NAME']).'" method="get">'."\n";
	echo 'Привет, '.htmlentities($_POST['name'], ENT_QUOTES).'!!!<br>'."\n";
	echo '<input type="submit" value="Повторить" />'."\n";
	echo '</form>'."\n";
}

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

Глобальная переменная $_SERVER['REQUEST_METHOD'] содержит метод, который был использован для запроса страницы: 'GET' — при вводе адреса страницы в браузере, затем после отправки формы — 'POST'.

$_SERVER['SCRIPT_NAME'] — содержит путь к текущему исполняемому скрипту. Это позволяет не менять код программы при её переименовании.

Функция htmlentities преобразует все символы в html-сущности, как указано в описании. Это позволяет корректно выводить в браузере введенные пользователем знаки разметки html и защищает от межсайтовых сценарных атак. Помимо экранирования одиночных кавычек (параметр ENT_QUOTES), необходимо также проверять пользовательский ввод и на соответствие введенных символов кодировке. Однако с последним будем разбираться позднее.

Можно применить для вывода html-кода формат heredoc:

function formShow() {
	$script = htmlentities($_SERVER['SCRIPT_NAME']);
	echo <<< FORM
<form action="$script" method="post">
Введите имя:<br>
<input type="text" name="name" /><br>
<input type="submit" value="Отправить" />
</form>
FORM;
}

Мне кажется, что heredoc затрудняет чтение, однако, если вам проще такой код — используйте его.

Результат вывода формы будет примерно таким:

<form action="/form_1.php" method="post">
Введите имя:<br>
<input type="text" name="name" /><br>
<input type="submit" value="Отправить" />
</form>

Далее разберемся как проверять пользовательский ввод.

При написании использовал книгу PHP. Рецепты программирования

Часть 2
Метки:
html form, php