Как пометить переключатель как проверенный с помощью Perl?
Я пытаюсь создать форму, которая может сохранить данные формы человека, чтобы он мог позже завершить заполнение формы. У меня нет проблем с сохранением данных во внешний файл, и я знаю, что было бы легко сделать то, что я пытаюсь сделать, если бы пользователю было разрешено сохранять свои данные только после заполнения полной страницы формы. Однако я хочу иметь возможность сохранять данные формы в любое время, даже если одна из нескольких страниц не была полностью заполнена. Кроме того, мне нравится использовать мои собственные сценарии 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 ответа
Да, есть более простой способ.
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 с помощью шаблонного решения - это значительно упрощает обслуживание.
Ваш вывод содержит почти одинаковый текст и код, повторяющийся 5 раз. Используя for
петля была бы удобнее.