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

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


90

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

Итак, создадим форму:

<form action=/cgi-bin/script.cgi>

... какие-то поля ...

<input type=submit value="Go!"> </form>

Несмотря на то, что кнопка Go! формально является полем ввода, ее данные не будут переданы сценарию, поскольку у нее отсутствует параметр name.

Чаще все же бывает удобно давать имена таким кнопкам. Например, для того чтобы определить, каким образом был запущен сценарий — нажатием кнопки или как-то еще (например, просто набором его URL в браузере). Создадим следующую форму:

<form action=/cgi-bin/script.cgi>

<input type=submit name="submit" value="Go!"> </form>

После запуска такой формы и нажатия в ней кнопки Go! сценарию среди прочих. параметров будет передана строка submit=Go!. Вернувшись к примеру из предыдущей главы, мы теперь легко сможем определить, был ли сценарий выполнен из формы или же простым указанием его URL (для этого достаточно проанализировать командную строку сценария и определить, присутствует ли в ней атрибут submit).

В принципе, все теги, за исключением <seiect>, с точки зрения сценария выглядят одинаково — как один, они генерируют строки вида имя ^значение, где имя — строка, заданная в атрибуте name, а значение — либо текст, введенный пользователем, либо содержимое атрибута value (например, так происходит у независимых и зависимых переключателей, которые мы вскоре рассмотрим).

Тег <input> — различные поля ввода

Существует много разновидностей этого тега, отличающихся параметром type. Перечислим наиболее употребительные из них. В квадратных скобках станем указывать необязательные параметры, а также параметры, отсутствие которых иногда имеет смысл (будем считать, что параметр name является обязательным, хотя это и не так в силу вышеизложенных рассуждений). Ни в коем случае не набирайте эти квадратные скобки!

Для удобства расположим каждый параметр тега на отдельной строке. И хотя стандарт HTML это не запрещает, настоятельно рекомендуем вам стараться в своих формах избегать такого синтаксиса. Не разбивайте теги форм на несколько строк, это значительно снижает читабельность кода страницы.

Текстовое поле (text)

<input type=text пате=имя [value=значение] [size=pa3Mep] [maxlength=4HCuio]

>

Гпава 3. CGI изнутри

91

Создает поле ввода текста размером примерно в size знакомест и максимально допустимой длиной maxiength символов (т. е. пользователь сможет ввести в нем не больше этого количества символов).

ЩШШШПШЯВ)

Не советуем, тем не менее, в программе на С полагаться, что придет не больше maxiength символов и выделять для их получения буфер фиксированного размера. Дело в том, что злоумышленник вполне может запустить ваш сценарий в обход стандартной формы (содержащей "правильный" тег <input>) и задать большой объем данных, чтобы этот буфер переполнить— известный прием взлома недобросовестно написанных программ.

Если задано значение атрибута value, то в текстовом поле будет изначально отображена указанная строка.

Поле ввода пароля (password)

<input type=password пате=имя [value=3Haчение] [size=pa3Mep] [maxlength=4HCJ7o]

>

Полностью аналогичен тегу <input type=text>, за исключением того, что символы, набираемые пользователем, не будут отображаться на экране. Это удобно, если нужно запросить какой-то пароль. Кстати, если задается значение параметра value, все будет в порядке, однако, посмотрев исходный HTML-текст страницы в браузере, можно увидеть, что он (браузер) указанное значение не показывает (непосредственно на странице). Сделано это, видимо, из соображений безопасности, хотя, конечно же, злоумышленник легко преодолеет такую защиту, если вы попытаетесь скрыть с ее помощью что-то важное.

Скрытое текстовое поле (hidden)

<input type=hidden пате=имя value=3Ha чение

>

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

Пусть, например, у нас имеется многоцелевой CGI-сценарий, который умеет принимать данные пользователя и отправлять их как почтовое сообщение. Поскольку мы бы не хотели фиксировать e-mail получателя жестко, но в то же время и не стремимся, чтобы пользователь мог его менять перед отправкой формы, оформим соответствующий тег в виде скрытого поля:

<form action=/cgi/sendmail.cgi method=post>



  • Сделайте себе пирсинг пупка.

  Hostland.Ru

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