我尝试创建一个可以保存个人表单数据的表单,以便以后完成表单。我将数据保存到外部文件没有问题,我知道如果用户被允许仅在整页表单完成后保存他的数据,那么我会尝试做的很容易。但是,我希望能够随时保存表单的数据,即使多个页面中的一个尚未完全完成。另外,我喜欢通过我的Perl脚本使用自己的html脚本,而不是调用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>
";
有更方便或方便的方法吗?
答案 0 :(得分:1)
您的输出包含几乎相同的文本和代码重复5次。使用for
循环会更方便。
答案 1 :(得分:1)
是的,这是一种更简单的方法。
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";
}
但是,如果你坚持手工制作自己的模板解决方案(而不是使用great number of existing Perl templating ones),你应该采用正确的方法。有各种输入类型的通用方法等......
此外,正如其他人在评论中指出的那样,通过模板化解决方案将代码与HTML分离是一个原因 - 它极大地简化了维护。