>
После запуска такой формы и нажатия в ней кнопки Go! сценарию среди прочих па-
раметров будет передана строка submit=Go!. Вернувшись к примеру из предыдущей
главы, мы теперь легко сможем определить, был ли сценарий выполнен из формы
Глава 3. CGI изнутри 57
или же простым указанием его URL (для этого достаточно проанализировать команд-
ную строку сценария и определить, присутствует ли в ней атрибут submit).
В принципе, все тэги, за исключением , с точки зрения сценария выглядят
одинаково — как один они генерируют строки вида имя=значение, где имя — то,
что задано в атрибуте name, а значение — либо текст, введенный пользователем,
либо содержимое атрибута value (например, так происходит у независимых и зави-
симых переключателей, которые мы вскоре рассмотрим).
Тэг — различные поля ввода
Существует много разновидностей этого тэга, отличающихся параметром type. Пе-
речислю наиболее употребительные из них. В квадратных скобках я буду указывать
необязательные параметры, а также параметры, отсутствие которых иногда имеет
смысл (будем считать, что параметр name является обязательным, хотя это и не
так в
силу вышеизложенных рассуждений). Ни в коем случае не набирайте эти квадратные
скобки!
Для удобства я расположу каждый параметр тэга на отдельной строке.
И хотя стандарт HTML это не запрещает, настоятельно рекомендую вам стараться в
своих формах избегать такого синтаксиса. Не разбивайте тэги форм на несколько
строк, это значительно снижает читабельность кода страницы.
Текстовое поле (text)
Создает поле ввода текста размером примерно в size знакомест и максимально до-
пустимой длиной maxlen символов (то есть пользователь сможет ввести в нем не
больше этого количества символов).
Не советую, тем не менее, в программе на Си полагаться, что придет не боль-
ше maxlen символов и выделять для их получения буфер фиксированного
размера. Дело в том, что злоумышленник вполне может запустить ваш сцена-
рий в обход стандартной формы (содержащей "правильный" тэг ) и
задать большой объем данных, чтобы этот буфер переполнить — известный
прием взлома недобросовестно написанных программ.
Если задано значение атрибута value, то в текстовом поле будет изначально
отобра-
жена указанная строка.
Часть I. Основы Web-программирования 58
Поле ввода пароля (password)
Полностью аналогичен тэгу , за исключением того, что симво-
лы, набираемые пользователем, не будут отображаться на экране. Это удобно, если
нужно запросить какой-то пароль. Кстати, если в качестве маски задается
значение
параметра value, все будет в порядке, однако, посмотрев исходный HTML-текст
страницы в браузере, можно увидеть, что он (браузер) это значение не показывает
(непосредственно на странице). Сделано это, видимо, из соображений безопасности,
хотя, конечно же, злоумышленник легко преодолеет такую защиту, если вы попытае-
тесь скрыть с ее помощью что-то важное.
Скрытое текстовое поле (hidden)
Создает неотображаемое (скрытое) поле. Такой объект нужен исключительно для
того, чтобы передать сценарию какую-то служебную информацию, до которой поль-
зователю нет дела, — например, параметры настройки.
Пусть, например, у нас имеется многоцелевой CGI-сценарий, который умеет прини-
мать данные пользователя и отправлять их как почтовое сообщение. Поскольку мы
бы не хотели фиксировать E-mail получателя жестко, но в то же время и не
стремим-
ся, чтобы пользователь мог его менять перед отправкой формы, оформим соответст-
вующий тэг в виде скрытого поля: