Январь 20, 2006

Взаимодействие нескольких форм (Часть 2)

Приведу пример скрипта, который генерирует форму, вставляя в нее все полученные параметры в ввиде скрытых полей:

#!/usr/local/bin/perl
print "Content-type: text/html\n\n";

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
local($name, $value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",
hex($1))/eg;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",
hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;
$FORM_DATA{$name} = $value;
}

print '<form name="newtext" action="newtext.pl"
method="post">',"\n";
foreach $key (keys %FORM_DATA) {
$value = $FORM_DATA{$key};
print "<input type=hidden name=\"$name\"
value=\"$value\">\n";
}
print <<END;
Можете добавить мысль:<br>
<textarea name="text" rows=5 cols=50></textarea><br>
<input type="submit" name="post" value="Добавить">
<input type="reset" name="escape" value="Очистить">
</form>
END

Того же результата можно достичь несколько другим способом. При этом нет необходимости генерировать все документы, содержащие форму, динамически. Достаточно создать один сценарий, который будет пропускать сквозь себя документ, вставляя в него соответствующие скрытые поля. В этом случае первая форма будет выглядеть так:

<form action="/cgi-bin/shopping.pl/firstspep.html"
method="post">
Введите Ваше имя: <input type="text" name="realname">
<br>
Введите Ваш адрес: <input type="text" name="email">
<br>
<input type="submit" name="Send"
value="Следующий шаг">
<input type="reset" name="Reset" value="Очистить">
</form>

Обратите внимание на то, что в этом примере скрипту передается параметр PATH_INFO, содержащий имя следующего отображаемого документа с формой. Этот документ должен содержать форму, в которую сценарием shopping.pl будут добавлены все скрытые поля. Вот примерный текст такого сценария:

#!/usr/local/bin/perl
print "Content-type: text/html\n\n";

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
local($name, $value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",
hex($1))/eg;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",
hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;
$FORM_DATA{$name} = $value;
}

$form_file = $ENV{'PATH_INFO'};
$full_path = "/usr/local/etc/httpd/htdocs" .
$form_file;

open(FILE, "<" . $full_path);
while (<FILE>) {
if (/<\s*form\s*.*>/i) {
print;
foreach $key (keys %FORM_DATA) {
$value = $FORM_DATA{$key};
print "<input type=hidden name=\"$name\"
value=\"$value\">\n";
}
} else {
print;
}
}
close(FILE);

Использование скрытых полей является наболее простым и интуитивно понятным механизмом сохранения контекста. Он опирается на общепринятые стандарты и требует минимум затрат при реализации.

продолжение следует...

Часть 1

Часть 3

Разместил:

Источник: CodeNet

Комментарии

1. 04.12.06 18:28 От: Илья

Отличная инфа.Так деражть.Респект.Вот еще сайты на эту темуЖ

Приворот
Любовный приворот
сильный приворот
О привороте

2. 04.12.06 18:29 От:

Отличная инфа.Так деражть.Респект.Вот еще сайты на эту темуЖ

http://loveprivorot.pochta.ru/privorot.html
http://webnotes.boom.ru/lubovnie_privoroti.html

Ваш комментарий

Обсудить на форуме?

Подумайте, прежде чем высказать своё мнение. Постарайтесь сделать свой комментарий полезным для других. Не используйте ненормативную лексику. Пользователи, пишущие "от нечего делать" бессмысленные наборы символов, будут блокироваться навсегда.