Как пометить переключатель как проверенный с помощью Perl? - PullRequest
0 голосов
/ 06 апреля 2010

Я пытаюсь создать форму, которая может сохранить данные формы человека, чтобы он мог позже завершить заполнение формы.У меня нет проблем с сохранением данных во внешний файл, и я знаю, что было бы легко сделать то, что я пытаюсь сделать, если бы пользователю было разрешено сохранять свои данные только после заполнения полной страницы формы.Однако я хочу иметь возможность сохранить данные формы в любое время, даже если одна из нескольких страниц не была полностью заполнена.Кроме того, я предпочитаю использовать свои собственные сценарии HTML через мои сценарии Perl вместо вызова команд формы CGI.pm.

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

#--------------------------------------------
open(INFO, "MYTEXTFILE.txt");
   @data = <INFO>;
close(INFO);
#--------------------------------------------
foreach $key (@data)  
{  
  ($aaa1,$aaa2,$aaa3,$aaa4,$aaa5,$e)=split(/,/,$key);
}

, а затем пытаюсь ввести доступные данные обратно в форму HTML.Это довольно легко, когда данные собираются с помощью текстовых полей:

 print"
 <p>Your response is: input type='text' name='aaa1' value='$aaa1' <\p>";

Но сложнее, когда это радиокнопка.Я использую:

 print"
 <table width='600' align='center' cellpadding='3'>
 <tr bgcolor=''>
           td bgcolor=''>1. Question #1                     
 </td>
 <td>1
 <input name='aaa1' type='radio' value='1'"; if ($aaa1==1) {print " CHECKED ";} print"/>/td>
 <td>2
 <input name='aaa1' type='radio' value='2'"; if ($aaa1==2) {print " CHECKED ";} print" />/td>
 <td>3
 <input name='aaa1' type='radio' value='3'"; if ($aaa1==3) {print " CHECKED ";} print" />/td>
 <td>4
 <input name='aaa1' type='radio' value='4'"; if ($aaa1==4) {print " CHECKED ";} print" />/td>
<td>5
<input name='aaa1' type='radio' value='5'"; if ($aaa1==5) {print " CHECKED ";} print" />/td>
</tr>
</table>
";

Есть ли более удобный или удобный способ сделать это?

Ответы [ 2 ]

1 голос
/ 06 апреля 2010

Да, есть более простой способ.

foreach my $value (1,2,3,4,5) {
    my $checked = ($aaa1 == $value) ? "CHECKED " : "";
    print "<td>$value <input name='aaa1' type='radio' value='$value' $checked/></td>\n";
}

Однако, если вы настаиваете на том, чтобы вручную свернуть свое собственное шаблонное решение (в отличие от использования большого числа существующих шаблонных шаблонов Perl ), вы должны сделать это ПРАВИЛЬНО. Иметь универсальные методы для различных типов ввода и т. Д ...

Кроме того, как отмечали другие в комментариях, есть ПРИЧИНА для отделения кода от HTML с помощью шаблонного решения - это значительно упрощает обслуживание.

1 голос
/ 06 апреля 2010

Ваш вывод содержит почти одинаковый текст и код, повторяющийся 5 раз.Использование цикла for было бы более удобным.

...