#4 php форма с методом GET: как форма собирает адрес с параметрами
Primary tabs
В уроках про GET-параметры и сравнение чисел мы набирали параметры в адресе руками. Пришло время автоматизировать: HTML-форма с методом GET сама соберёт адрес за нас. Возьмём страницу сравнения чисел из прошлого урока и добавим к ней форму.
Немного теории
Формы в HTML подробно описаны в учебнике: создание web-форм (тег form, атрибуты action и method) и текстовые поля. Из нового здесь только одно: у формы будет method="get" — то есть данные поедут на сервер в адресе страницы, как в прошлых уроках.
Код страницы
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Сравнение чисел через форму</title>
</head>
<body>
<h1>Сравнение чисел</h1>
<form action="" method="get">
<p>Число A: <input type="text" name="a"></p>
<p>Число B: <input type="text" name="b"></p>
<p><button type="submit">Сравнить</button></p>
</form>
<?php
if (isset($_GET['a'], $_GET['b'])
&& $_GET['a'] !== '' && $_GET['b'] !== '') {
$a = $_GET['a'];
$b = $_GET['b'];
if ($a > $b) {
echo '<p>' . $a . ' больше ' . $b . '</p>';
} elseif ($a < $b) {
echo '<p>' . $a . ' меньше ' . $b . '</p>';
} else {
echo '<p>' . $a . ' равно ' . $b . '</p>';
}
}
?>
</body>
</html>
Разберём форму построчно:
method="get"— данные формы браузер вложит в адрес (строкой запроса);- атрибут
nameполя — это имя будущего параметра:name="a"превратится в?a=..., а значение придёт в$_GET['a']; action=""— форма отправляет данные на ту же страницу (вactionможно указать и отдельный файл-обработчик);- кнопка
type="submit"выполняет отправку.
PHP-код ниже формы нам уже знаком по прошлому уроку. Новичком здесь выглядит только лишняя проверка: пустое поле тоже отправляется — как параметр с пустым значением (a=), и isset() его «видит». Поэтому добавлено условие !== '': пока оба поля не заполнены, comparisons не будет.
Отправляем и смотрим в адрес
Откройте http://localhost:19791/lessons/lesson04-form-get/, введите 5 и 7, нажмите «Сравнить». Страница ответит «5 меньше 7» — а главное, посмотрите в адресную строку: там появится ?a=5&b=7. Тот самый адрес, который мы раньше набирали руками, теперь собирает форма.
Что произошло на самом деле
Браузер взял имена и значения полей, собрал из них пары, приклеил их к адресу после знака вопроса и отправил обычный GET-запрос. Для сервера и PHP нет никакой разницы, набрали вы адрес вручную или его собрала форма: параметры точно так же попадают в $_GET. Форма — это просто удобный способ составить адрес с данными.
Попробуйте сами
- отправьте форму с одним пустым полем — посмотрите, что покажет адресная строка и страница;
- после отправки поправьте значения прямо в адресной строке и нажмите Enter — результат пересчитается без формы;
- маленький шаг в HTML: замените у полей
type="text"наtype="number"— и браузер сам начнёт следить, чтобы вводились числа.
Итоги
- форма с
method="get"собирает адрес: каждое поле становится параметром?имя=значение; - имя параметра задаётся атрибутом
nameполя; - сервер не отличает «ручной» адрес от отправленного формой — данные в любом случае приходят в
$_GET; - пустое поле отправляется как параметр с пустым значением — не забывайте это проверять.
В следующем уроке переключим форму на метод POST — и увидим, куда «прячутся» данные, если их нельзя передавать в адресе.
- Log in to post comments
- 9 reads