Задача: разработать скрипт для сохранения в файл значений, посланных HTML-формой. Каждое значение в файле должно иметь комментарий. Полученный файл должен выглядеть примерно так:
имя [name]: Хо Ши Мин электронная почта [email]: ivan@mydom.ru домашняя страница [www]: ivan.mydom.ru
Для этого случая HTML-форма должна выглядеть так:
<form action="anketa.pl"> имя: <input type="text"name="name"> <input type="hidden" name="descr010_name"value="имя"><br> электронная почта: <input type="text"name="email"> <input type="hidden"name="descr020_email" value="имя"><br> домашняя страница: <input type="text"name="www"> <input type="hidden" name="descr030_www"value="имя"><br> <input type="submit"> </form>
Суть подхода заключается в добавлении элемента HIDDEN для каждого значения на форме. Этот дополнительный элемент содержит информацию о том, с каким комментарием должно сохраняться значение в файл и на каком месте в файле это значение располагать. Таким образом для каждого значения формы необходимо создать тег
<INPUT type="hidden" name="descr[POSTION]_[NAME]" value="[COMMENT]" >
где
[POSTION] – позиция значения в результирующем файле [NAME] – имя значения формы, которому соответствует это элемент [COMMENT] – описание значения
Пример реализации скрипта на perl для обработки формы.
sub add_form { my @now = localtime(); my $msg = ''; $now[3] = ($now[3]<9)?"0$now[3]":$now[3]; $now[4] ++; $now[4] = ($now[4]<9)?"0$now[4]":$now[4]; my $anketa_file = "$ENV{DOCUMENT_ROOT}/form_" . ($now[5] + 1900) . "-$now[4]-$now[3]_$now[2]-$now[1]-$now[0].txt";
# получить имена описаний переменных my @form_HTTP_vars_descriptions = sort grep { m/^descr[0-9]*_/ } keys(%FORM); foreach my $key_descr ( @form_HTTP_vars_descriptions ) { ## обработать каждое описание ## получить имя переменной $key_descr =~ m/^descr[0-9]*_(.*)$/; my $key = $1; ## получить значение описания этой переменной my $descr = $FORM{"$key_descr"}; ## получить значение переменной my $val = $FORM{$key}; ## заменить все символы перехода на новую строку $val =~ s/r?n/<BR>/gs; ## сформировать строку для добавления в выходной файл $msg .= "$descr [$key]: $valn"; } if(open(F, ">$anketa_file")) { print F "$msg"; close(F); } }
Теперь при создании новой формы в качестве обработчика можно использовать приведённую функцию с минимальными модификациями (имя файла для сохранения). Конечно, можно максимально унифицировать эту функцию так, что её вообще не нужно будет менять при появлении новых форм на нашем сайте. Пусть это будет вашим домашним заданием.
|