Первый сайт на Perl




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


Рис 15.5. Подтверждение регистрации

В противном случае формируется HTML-документ, предлагающий ввести пароль повторно (Рисунок 15.6). Этот новый документ содержит форму, в состав которой входят два видимых поля типа "password" — для ввода и подтверждения пароля, и скрытые поля типа "hidden" — для сохранения остальных данных, введенных при заполнении исходной формы. Каждое скрытое поле новой формы наследует у соответствующего поля исходной формы атрибуты name и value. Если эти данные не сохранить, то их придется вводить заново, принуждая пользователя повторно выполнять уже сделанную работу. Информация, сохраненная в скрытых полях, невидима пользователю и недоступна для изменения.

Рис 15.6. Повторное приглашение для ввода пароля

Культура Perl допускает различные уровни владения языком. В рассмотренном варианте использован минимальный набор средств. Очевидно, что часть кода, например, декодирование, требуется при обработке не только данной, но и любой другой формы. Естественным шагом в развитии исходного варианта сценария является выделение этой части в отдельную подпрограмму и предоставление доступа к ней другим сценариям. Для этого преобразуем исходный текст в соответствии с планом, изложенным в примере 15.7.

1. Часть исходного кода может быть использована другими CGI-программами. Преобразуем ее в отдельный модуль, сохраняемый в файле CGI__UTILS.pm.

package CGI_UTILS; require Exporter;

@ISA = qw(Exporter);

^EXPORT = qw(print_header process_input);

# Подпрограмма вывода заголовка ответа sub print_header {

print "Content-type: text/html\n\n"; } .

# Подпрограмма декодирования данных форьы sub process_input {

my ($form_ref)=(?_.;

my ($ form_data,@pai rs);

my ($temp)="";

if ($ENV{'REQUEST_METHOD'} eq 'POST') {

read(STDIN,$form_data,$ENV{'CONTENT_LENGTH'}); } else {

$form_data=$ENV{'QUERY_STRING'}; }

$form_data=~s/%(..)/pack("c",hex($1))/ge; $form_data=~tr/+/ /; $form_data=~s/\n/\0/g; @pairs=split(/&/,$form_data); foreach $item(@pairs) {




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