lueN=значениеN][selected]>СтрокаN
Мы видим, что и этот тэг имеет парный закрывающий. Кроме того, его существова-
ние немыслимо без тэгов , которые и определяют содержимое списка.
Параметр size задает, сколько строк будет занимать список. Если size равен 1,
то спи-
сок будет выпадающим, в противном случае — занимает size строк и имеет полосы
прокрутки. Если указан атрибут multiple, то будет разрешено выбирать сразу не-
сколько элементов из списка, а иначе — только один. Кроме того, атрибут
multiple
не имеет смысла для выпадающего списка.
Каждая строка списка определяется своим тэгом . Если в нем задан
атрибут
value, как это часто бывает, то соответствующая строка списка будет идентифици-
роваться его значением, а если не задан, то самим текстом этой строки
(считается,
что value равно самой строке). Кроме того, если указан параметр selected, то
дан-
ная строка будет изначально выбранной. Кстати, чуть не забыл: закрывающие тэги
можно опускать, если упрощение не создает конфликтов с синтаксисом
HTML (в действительности это можно делать почти всегда).
Давайте теперь посмотрим, в какой форме пересылаются данные списка сценарию.
Ну, со списком одиночного выбора вроде бы ясно — просто передается пара
имя=значение, где имя — имя тэга , а значение — идентификатор вы-
бранного элемента (то есть, либо атрибут value, либо сама строка элемента
списка).
Глава 3. CGI изнутри 63
Списки множественного выбора (multiple)
В какой форме приходят данные сценарию, если был создан multiple-список? Очень
просто: все произойдет так, будто есть не один, а несколько не-multiple-списков,
все с
одинаковым именем, и в каждом из которых выбрано по одному элементу. Иными
словами, строка параметров, порожденная этим тэгом, будет выглядеть примерно
так:
имя=значение1&имя=значение2&...&имя=значениеN
Кстати говоря, совершенно не уникальный случай — то, что с одним именем связано
сразу несколько значений. Действительно, нам никто не мешает создавать и другие
тэги с идентичными именами. Это часто делается, например, для переключателей-
флажков:
Один
Два
Три
Если теперь пользователь установит сразу все флажки, то сценарию поступит
строка
(конечно, в URL-кодированном виде):
имя=Один&имя=Два&имя=Три
Из всего сказанного следует не очень утешительный вывод: при разборе строки
пара-
метров в сценарии мы не можем полагаться на то, что каждой переменной
соответст-
вует только одно значение. Нам придется учитывать, что их может быть не "один",
а
"много". А это очень неприятно с точки зрения программирования — особенно на Си.
Попутно мы обнаружили, что любой multiple-список может быть представлен набо-
ром флажков (независимых переключателей), а любой не-miltiple — в виде несколь-
ких радиокнопок. Так что, вообще говоря, тэг — некоторое функциональ-
ное излишество, и с точки зрения сценария вполне может заменяться флажками и
радиокнопками.
Загрузка файлов
Данный раздел главы предназначен скорее для ознакомления, нежели для
применения в качестве точной инструкции по загрузке файлов. Он прекрасно
демонстрирует, почему нам так удобно использовать PHP для программиро-
вания в Web. Организацию загрузки файлов в PHP мы подробно разберем в
части V.
Иногда бывает просто необходимо позволить пользователю не только заполнить тек-
стовые поля формы и установить соответствующие переключатели, но также и ука-
зать несколько файлов, которые будут впоследствии загружены с