Автор: Котеров Д.В.
Итак, мы знаем, что наиболее распространенными методами передачи данных между браузером и сценарием являются GETи POST. Однако вручную задавать строки параметров для сценариев и к тому же URL-кодировать их, согласитесь, довольно утомительно. Давайте посмотрим, что же язык HTML предлагает нам для облегчения жизни.
Сначала рассмотрим метод GET. Даже программисту довольно утомительно набирать параметры в URL вручную. Всякие там ., &, %... Представьте себе пользователя, которого принуждают это делать. К счастью, существуют удобные возможности языка HTML, которые, конечно, поддерживаются браузерами. И хотя я уже замечал, что в этой книге будет лишь немного рассказано о HTML, о формах мы поговорим очень подробно.
Итак, пусть у нас на сервере в корневом каталоге размещен файл сценария script.cgi(наверное, вы уже заметили, что расширение cgi принято присваивать CGI-сценариям, хотя, как уже упоминалось, никто не мешает вам использовать любое другое слово). Этот сценарий распознает 2 параметра: nameи age. Где эти параметры задаются, мы пока не решили. При переходе по адресу http://www.somehost.com/script.cgiон должен отработать и вывести следующую HTML-страницу:
<html><body>
Привет, name! Язнаю, Вамage лет!
</body></html>
|
Разумеется, при генерации страницы нужно nameи ageзаменить на соответствующие значения, переданные в параметрах.
Передача параметров "вручную"
Давайте будем включать параметры прямо в URL, в строку параметров. Таким образом, если запустить в браузере
http://www.somehost.com/script.cgi.name=Vasya&age=20
мы получим страницу с нужным результатом:
<html><body>
Привет, Vasya! Язнаю, Вам20 лет!
</body></html>
|
Заметьте, что мы разделяем параметры символом &, а также используем знак равенства =. Это неспроста. Сейчас мы обсудим, почему.
Использование формы
Как теперь нам сделать, чтобы пользователь мог в удобной форме ввести свое имя и возраст. Очевидно, нам придется создать что-то вроде диалогового окна Windows, только в браузере. Итак, нам понадобится обычный HTML-документ (например, с именем form.html и расположенный в корневом каталоге) с элементами этого диалога — полями ввода текста и кнопкой, при нажатии на которую запустится наш сценарий. Текст этого документа приведен в листинге 2.1.
Листинг 2.1. Документ /form.html с формой
<html><body>
<form action=script.cgi method=GET>
Введитеимя: <input type=text name="name" value="Неизвестный">
Введитевозраст: <input type=text name="age" value="неопределенный">
<input type=submit value="Нажмите кнопку!">
</body></html>
Замечание
Вы можете заметить, что некоторые атрибуты тэгов я написал в кавычках (например, name="age"), а некоторые — нет. Как показывает практика, везде, где это не конфликтует с синтаксисом HTML (то есть, в текстах, в которых нет пробелов и букв кириллицы), можно кавычки опускать. Мне лично нравится заключать значения полей nameи valueв кавычки, а остальные — писать без них. Правда, стандарт на язык HTML это не допускает (он требует обязательного наличия кавычек), но большинство браузеров относится к этому весьма и весьма лояльно.
Загрузим наш документ в браузер.
Теперь, если занести в поле nameсвое имя, а в поле для возраста — возраст и нажать кнопку Нажмите кнопку!, браузер обратится к сценарию по URL, указанному в атрибуте action тэга <form> формы:
http://www.somehost.com/script.cgi
Он передаст через .все параметры, которые помещены внутрь тэгов inputв форме, отделяя их амперсандом (&). Имена полей и их значения будут разделены знаком =. Теперь вы понимаете, почему мы с самого начала использовали эти символы.
Итак, реальный URL, который будет сформирован браузером при старте сценария, будет таким (учитывая, что на странице был пользователь по имени Vasya и ему 20 лет):
http://www.somehost.com/script.cgi.name=Vasya&age=20
Самое, пожалуй, полезное, что можно вынести из рассмотренного примера, — то, что все URL-перекодирования и преобразования осуществляются браузером автоматически. То есть, пользователю теперь совершенно не нужно об этом задумываться и ломать голову над путаницей шестнадцатеричных кодов и управляющих символов.