Linux и UNIX: программирование в shell. Руководство разработчика - Страница 106
Создание простой формы
Создадим простую форму,_ реализующую ссылку из документа main.shtml на сценарий books.cgi.
Вставьте следующие две строки после последней записи ссылки, которая была создана в файле main.shtml:
Basic form using GET method Form1
Теперь введите следующий код и сохраните его в файле books.cgi; не забудьте поместить этот файл в каталог cgi‑bin.
$ pg books.cgi
#!/bin/sh
# сценарий books.cgi
echo "Content‑type: text/html"
echo ""
echo ""
echo "
"# вызов books_result.cgi, затем пользователь щелкает на кнопке отправки
echo "
" echo "" echo ""Действие form action выбирается, как только пользователь щелкнет на кнопке 'Send it', в результате чего вызывается сценарий books_result.cgi. В этом случае будет использоваться метод get.
В форме, код которой приведен выше, отображаются два текстовых поля, два раскрывающихся поля и два флажка.
Текстовое поле, предназначенное для ввода пользовательского имени, имеет длину 30 символов; результаты ввода присваиваются переменной contact.
Первое раскрывающееся меню обеспечивает выбор любимого пользовательского фильма; выбранная опция присваивается переменной film.
Второе раскрывающееся меню обеспечивает выбор любимого актера; выбранная опция присваивается переменной actor.
Можно установить один или оба флажка, выполнив щелчок мышью на требуемом варианте. Выбранные значения хранятся в переменных view_cine и view_vid. Если пользователь указывает один из флажков, переменные должны иметь значение "on".
Область текстового поля обеспечивает ввод большего количества строк текста, чем стандартное текстовое поле (текст, разбитый на 30 столбцов и 4 строки, в нашем случае(, а вся введенная информация присваивается переменной textarea.
Для отсылки данных в качестве типа ввода указывается слово submit. Чтобы очистить форму, щелкните на кнопке clear.
Введите следующий сценарий cgi, назовите его books_result.cgi и сохраните его в каталоге cgi‑bin.
$ pg books_result.cgi
#!/bin/sh
#сценарий books_result.cgi
#вывод на печать настроек web–сервера env для метода get
echo "Content‑type: text/html"
echo ""
echo "
"echo "
""echo " Results from a GET form"
echo "REQUEST_METHOD : $REQUEST_METHOD"
echo "QUERY STRING : $QUERY_STRING"
echо "
Сценарий отображает значения пары переменных cgi, query_strinG и request_method. Переменная Query_string будет хранить все данные в виде кодированной строки, которая отправлена формой, созданной с помощью сценария books.cgi. Переменная request_method сохраняет тип используемого метода; в данном случае будет выбран метод get. На рис. 29.7 показано, как выглядит форма, созданная с помощью сценария books.cgi.
Рис. 29.7. Форма cgi, использующая метод get
Теперь выполним ввод и отсылку некоторой информации (рис. 29.8). После щелчка на кнопке 'Send it' отображается страница, показанная на рис. 29.9. Значение переменной QUERY_string отображается только частично по причине большой длины строки. Ниже приведена строка, имеющая полную длину:
contact=David+Tansley&f ilm=The+So_md+Of+Music&actor=Bruce+Willis&view_cine=onS,view_vid=onbtextarea=%21%22%A3%A3%24%25 %24%25%5E*%5E%26*%28%29*%2 8%29%28*%OD%OAHow%27s+that+%21%21
Рис. 29.8. Выбор и ввод информации в форму
Рис. 29.9. Информация, отправленная формой, закодирована
Для пересланной информации необходимо иметь следующие поля, присвоенные
переменной query string, показанной выше:
Переменная
Значение переменной
contact
David Tan$1ey
film
The Sound of Music
actor
Bruce Willis
view cine
Если установлено значение on, то флажок выбран
view_vid
Если установлено значение on, то флажок выбран
textarea
!"%$%А*А&*о*о(*
How's that it!
Декодирование закодированной строки
После того как пользователь щелкнет на кнопке "submit", информация присваивается переменной query_string, а строка кодируется следующим образом: • Все пробелы заменяются знаками +.
• Все поля значений разделяются символами &.
• Все значения и соответствующие поля разделяются знаками =.
• Все символы и некоторые специальные символы представляются кодами %ху, где xy является шестнадцатеричным эквивалентом данного символа. При просмотре переменной QUERY_STRING можно заметить, что многие из этих символов представлены переменной textarea.
Протокол cgi определяет, что любые символы в форме %ху (где xy является шестнадцатеричным числом) могут быть преобразованы в эквивалентные символы ASCII. Эти шестнадцатеричные символы состоят из специальных символов &, %, +, =, (, ) и всех других символов, выходящих за рамки десятичного диапазона ASCII с границей 127. Например, символу ( соответствует эквивалент в виде %29.


