На этом шаге мы рассмотрим элементы обработки данных в сценарии и проиллюстрируем его работу.
Пример 158 шага содержит также код, который не связан с созданием формы. Он состоит из одного условного оператора, в котором в качестве условия используется значение, возвращаемое функцией param(). Эта функция используется также внутри блока условного оператора. Разберем, для чего она применяется. При помощи функции param() модуля CGI можно выполнить следующие действия.
@names = param;
@values = param('language');
$value = param ('regname');
param (-name=>'language', -values=>['russian','english','french']);
param('language','russian','english','french');
Часть сценария, предшествующая условному оператору, предназначена для создания формы из примера 150 шага. Заключительная часть, состоящая из условного оператора, обрабатывает заполненную и отправленную Web-серверу форму. Это происходит потому, что по умолчанию приложением, обрабатывающим форму, является данный сценарий (см. описание start_form). Таким образом, в одном сценарии содержится код, и создающий форму, и ее обрабатывающий.
Сохраним код, приведенный в примере 158 шага, в файле welcome.cgi. Этот файл можно поместить на Web-сервере в стандартный каталог cgi-bin, предназначенный для хранения CGI-сценариев. Если из удаленного браузера послать запрос на выполнение этого сценария, то Web-сервер, получив запрос, выполнит сценарий welcome.cgi. Сценарий "на лету" создаст HTML-документ, содержащий форму, и передаст его Web-серверу, который отправит документ браузеру. Браузер, получив документ, отобразит его, как это показано на рисунке 1.
Рис.1. Документ, созданный CGI-сценарием
После заполнения формы и нажатия кнопки ОК данные формы будут вновь отправлены Web-серверу, который передаст их для обработки все тому же сценарию welcome.cgi. Сценарий "на лету" создаст новый HTML-документ с учетом полученных данных и через сервер направит его браузеру. Браузер отобразит новый документ, как показано на рисунке 2.
Рис.2. Документ, созданный после обработки данных формы
Сценарий welcome.cgi можно передать для выполнения интерпретатору perl, а результат вывести в файл, чтобы посмотреть, как вызовы функций модуля CGI преобразуются в тэги HTML-документа. Документ HTML, созданный сценарием welcome.cgi, имеет следующий вид.
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> <HTML> <HEAD> <TITLE>Пример формы</TITLE> </HEAD> <BODY> <H2>Регистрационная страница Клуба любителей фантастики</H2> Заполнив анкету, вы сможете пользоваться нашей электронной библиотекой.<BR> <FORM METHOD="POST" ENCTYPE="application/x-www-form-urlencoded"> Введите регистрационное имя:<INPUT TYPE="text" NAME="regname" > <P>Введите пароль: <INPUT TYPE="password" NAME="password1" MAXLENGTH=8> <P>Подтвердите пароль: <INPUT TYPE="password" NAME="password2" MAXLENGTH=8> <P>Ваш возраст <P> <INPUT TYPE="radio" NAME="age" VALUE="lt20" CHECKED>до 20 <INPUT TYPE="radio" NAME="age" VALUE="20_30">20-30 <INPUT TYPE="radio" NAME="age" VALUE="30_50">30-50 <INPUT TYPE="radio" NAME="age" VALUE="gt50">старше 50 <BR><BR>На каких языках читаете: <INPUT TYPE="checkbox" NAME="language" VALUE="русский" CHECKED>русский <INPUT TYPE="checkbox" NAME="language" VALUE="английский">английский <INPUT TYPE="checkbox" NAME="language" VALUE="французский">французский <INPUT TYPE="checkbox" NAME="language" VALUE="немецкий">немецкий <BR><BR>Какой формат данных является для Вас предпочтительным <BR> <SELECT NAME="type"> <OPTION VALUE="Plain text">Plain text <OPTION VALUE="PostScript">PostScript <OPTION VALUE="PDF">PDF </SELECT> <BR><BR>Ваши любимые авторы:<BR> <TEXTAREA NAME="wish" ROWS=3 COLS=40></TEXTAREA><BR> <INPUT TYPE="submit" NAME="OK" VALUE="OK"> <INPUT TYPE="reset" VALUE="Отменить"> <INPUT TYPE="hidden" NAME=".cgifields" VALUE="language"> <INPUT TYPE="hidden" NAME=".cgifields" VALUE="age"> </FORM><HR> </BODY> </HTML>
В действительности документ, созданный сценарием welcome.cgi, состоит из небольшого количества длинных строк, что связано с тем, как они формируются методами модуля CGI. Поэтому реально сформированный текст для удобства представлен в более структурированном виде. Но это единственное изменение, не влияющее на смысл автоматически созданного документа.
Мы закончили изучать основы языка программирования Perl. Жедаем Вам успехов в дальнейшем освоении и использовании этого языка.