РНР 5 в подлиннике

Страница 35 из 554


72

Часть I. Основы Web-программирования

Введите дату рождения:

<input type=text name="born" ^а1ие="Неизвестно"хЬг> <input type=submit value="Ha;KMHTe кнопку"> </bodyx/html>

(_Замечание )

Вы можете заметить, что некоторые атрибуты тегов мы написали в кавычках (например, name="born"), а некоторые — без них. Как показывает практика, везде, где нет конфликта с синтаксисом HTML (т. е. в текстах, в которых отсутствуют пробелы и буквы кириллицы), можно кавычки опускать. Нам нравится заключать значения полей name и value в кавычки, а остальные— писать без них. Правда, стандарт на язык HTML это не допускает (он требует обязательного наличия кавычек), но большинство браузеров относится к этому весьма и весьма лояльно.

Загрузим наш документ в браузер. Получим форму, представленную на рис. 2.1.

Рис. 2.1. HTML-форма

Теперь, если занести в поле name свое имя, а в поле для возраста — возраст и нажать кнопку Нажмите кнопку, браузер обратится к сценарию по URL, указанному в атрибуте action тега <form> формы:

http://example.com/script.cgi

Он передаст через ? все параметры, которые помещены внутрь тегов <input> в форме, отделяя их амперсандом (&). Имена полей и их значения будут разделены знаком =. Теперь вы понимаете, почему мы с самого начала использовали эти символы?

Итак, реальный URL, который будет сформирован браузером при старте сценария, будет таким (учитывая, что на странице был пользователь по имени Thomas, и он родился 11 марта 1962 г.):

http://exampIe.com/script.cgi?name=Thomas&born=1962-03-ll

Самое, пожалуй, полезное, что можно вынести из рассмотренного примера, — все URL-перекодирования и преобразования осуществляются браузером автоматически. То есть, пользователю теперь совершенно не нужно об этом задумываться и ломать голову над путаницей шестнадцатеричных кодов и управляющих символов.

Гпава 2. Интерфейс CGI и HTTP

73

Абсолютный и относительный пути к сценарию

Обратим внимание на поле action тега <form>. Поскольку он не предваряется слэшем (/), то представляет собой относительный путь к сценарию. То есть браузер при анализе тега попытается выдать запрос на запуск сценария, имеющего имя script.cgi и расположенного в том же самом каталоге, что и форма (точнее, HTML-документ с формой).

Как вы, наверное, догадались, термин "каталог" здесь весьма условен. На самом-то деле имеется в виду не реальный каталог на сервере (о котором браузер, кстати, ничего не знает), а часть URL, предшествующая последнему символу / в полном URL файла с формой. В нашем случае это просто http://example.com. Заметьте, что здесь учитывается имя хоста. Как видим, все это мало похоже на обычную файловую спецификацию.

Однако можно указать и абсолютный путь как на текущем, так и на другом хосте. В первом случае параметр action будет выглядеть примерно следующим образом:

<form action="/some/path/script.cgi">

Браузер определит, что это абсолютный путь в пределах текущего хоста (точнее, хоста, на котором расположен документ с формой) по наличию символа / впереди пути. Рекомендуется везде, где только возможно, пользоваться таким определением пути, всячески избегая указания абсолютного URL с именем хоста — конечно, за исключением тех ситуаций, когда ресурс размещен сразу на нескольких хостах (такое тоже иногда встречается).

Во втором случае получится приблизительно следующее:

<form action="http://example.com/any/script.cgi">

Еще раз обратите внимание на то, что браузеру совершенно все равно, где находится запускаемый сценарий — на том же хосте, что и форма, или нет. Это позволяет создавать сайты, расположенные на нескольких хостах, "прозрачно" для их посетителей. Вся идеология сети Интернет и службы World Wide Web построена на этой идее — возможности свободного перемещения (и ее легкости) по гиперссылкам, где бы ни находился сервер, на который они указывают.

Что же теперь нужно сделать, чтобы послать данные не методом GET, а методом POST? Нетрудно догадаться: достаточно вместо method=GET указать method=POST. Больше ничего менять не надо.

Если не задать параметр action в теге <form> вообще, то по умолчанию подразумевается метод get.

Таким образом, мы можем теперь совсем не нагружать пользователя такой информацией, как имя сценария, его параметры и т. д. Он всегда будет иметь дело только с полями ввода, переключателями и кнопками формы, а также с гиперссылками.

Метод POSTw формы




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006