Учебное пособие: Этапы создания веб-приложения. Основы РНР и MySQL
♦ Значение "submit" задает кнопку, при нажатии которой происходит отправка формы на сервер.
Возможны и другие значения (да и <input> - не единственный тэг, задающий элемент формы), но их мы рассмотрим в следующих главах.
Итак, что же происходит, когда нажимают кнопку "OK"?
1. Браузер просматривает входящие в форму элементы и формирует из их атрибутов name и value данные формы. Допустим, введено имя Vasya . В этом случае данные формы: name=Vasya&okbutton=OK.
2. Браузер устанавливает соединение с сервером, отправляет на сервер запрос документа, указанного в атрибуте action тэга <form> , используя метод отправки данных, указанный в атрибуте method (в данном случае - GET ), передавая в запросе данные формы.
3. Сервер анализирует полученный запрос, формирует ответ, отправляет его браузеру и закрывает соединение.
4. Браузер отображает полученный от сервера документ.
Отправка того же запроса вручную (с помошью telnet ) выглядит следующим образом (предположим, что доменное имя сайта - www.example.com ):
telnet www.example.com 80
GET /cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK HTTP/1.0\r\n
Host: www.example.com\r\n
\r\n
Нажатие submit -кнопки в форме с методом отправки "GET" аналогично вводу соответствующего URL (со знаком вопроса и данными формы в конце) в адресной строке браузера: http://www.example.com/cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK
На самом деле, метод GET используется всегда, когда Вы запрашиваете с сервера какой-либо документ, просто введя его URL , или щелкнув по ссылке. При использовании <form method="GET" ... > , к URL просто добавляются знак вопроса и данные формы.
Как же нам в сценарии получить строку параметров, переданную после знака вопроса в URL при обращении к сценарию? Для этого можно проанализировать переменную окружения QUERY_STRING , которая в РНР доступна под именем $_SERVER[QUERY_STRING] .
Напишем пример, чтобы это проиллюстрировать (листинг qs.php ).
Листинг qs.php. Вывод параметров командной строки.
<?php
echo «Данные из командной строки: $_SERVER[QUERY_STRING]»;
?>
Если теперь запустить этот сценарий из браузера (перед этим сохранив его в корневом каталоге сервера) таким образом:
http://localhost/qs.php?this+is+the+world/
то получим документ следующего содержания: Данные из командной строки: this+is+the+world
Обратите внимание на то, что URL - декодирование символов не произошло: строка $_server [' query_string '] , как и одноименная переменная окружения, всегда приходит в той же самой форме, в какой она была послана браузером.
Так как РНР изначально создавался именно как язык для Web-программирования, то он дополнительно проводит некоторую работу с переменной query_string перед передачей управления сценарию. А именно, он разбивает ее по пробельным символам (в примере пробелов нет, их заменяют символы + , но эти символы РНР также понимает правильно) и помещает полученные кусочки в массив-список $argv , который впоследствии может быть проанализирован в программе.
Массив $argv используется при программировании на РНР крайне редко, что связано с большими возможностями интерпретатора по разбору данных, поступивших от пользователя. Однако в некоторых (учебных) ситуациях его применение оправдано.
Возможно, все эти технические подробности кажутся невероятно скучными и даже ненужными ("а при чем тут PHP?"). Но это основы работы по протоколу HTTP , которые необходимо знать каждому web-программисту.
Теперь заменим первую строку нашей формы на следующую: