Иллюстрированный самоучитель по Perl



         

Пример создания собственного CGI-сценария - часть 5


Файл confirmation.html содержит документ, посылаемый клиенту в качестве сообщения об успешной регистрации:

<html>

<head><title>Пoздpaвляeм!</title></head> <body><h2>Пoздpaвляeм! </h2><br>

Ваша регистрация прошла успешно. Вы можете пользоваться нашей библиотекой. ..- -

<br>

Спасибо за внимание.

</body>

</html>

Файл goback.html содержит документ, посылаемый клиенту при получении неполных данных:

<html>

<head><title>Heпoлныe данные</^^1ех/пеай>

<body><h2>HsBHHMTe, Вы пропустили обязательные данные</h2>

<br>

<а href=" http://www.klf.ru/welcome.Ылп1 ">Попробуйте еще раз, пожалуйста </а>

</body>

</htral>

В приведенном тексте появились некоторые новые элементы, которые необходимо пояснить.

Подпрограмма process_input модуля cgi_utiis.pm передает декодированные данные через вызываемый по ссылке параметр — ассоциативный массив. [Кроме того, она возвращает при помощи функции return () те же данные, но в виде строки, состоящей из пар имя=значение, разделенных символом "&". Обратите внимание на то, как подпрограмма вызывается в основной программе:

$file_rec=sprocess_input(\%FORM);

В качестве аргумента ей передается ссылка на ассоциативный массив. В тексте подпрограммы появилась проверка наличия полей формы с совпадающими именами и разными значениями:

if (!defined($form_ref->{$name})) {

$form_ref->{$name}=$value; }

else { }}

Этот фрагмент необходим для того, чтобы правильно обработать следующую ситуацию из нашего примера. Выбраны несколько переключателей, определяющих языки, которыми владеет пользователь: русский, английский, французский. Так как соответствующие элементы формы имеют одинаковые имена name=language, то без проверки в ассоциативный массив %fcrm_ref, куда помещаются обработанные данные, попадет только информация от последнего обработанного Элемента name=language value=french. В Подобном случае обычное присваивание заменяется операцией присваивания с конкатенацией

$form_ref->{$name} .= "\0$value",

которая к переменной $fom_ref->{$name) добавляет нулевой символ и значение $value.

В основной программе registrar.cgi обратим внимание на то, как передается ссылка на готовый HTML-документ. Для этого вместо заголовка content-type: text/html выводится заголовок Location: URL, сообщающий серверу адрес документа.

Еще один новый элемент в основной программе — сохранение данных в файле с именем users.  




Содержание  Назад  Вперед