-1

我尝试创建一个可以保存一个人的表单数据的表单,以便他以后可以完成表单。我将数据保存到外部文件没有问题,并且我知道如果仅在完成整页表单后才允许用户保存他的数据,那么我尝试做的事情会很容易。但是,我希望能够随时保存表单的数据,即使多个页面中的一个尚未完全完成。另外,我喜欢通过我的 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>
";

有没有更方便或方便的方法来做到这一点?

4

2 回答 2

1

您的输出包含几乎相同的文本和重复 5 次的代码。使用for循环会更方便。

于 2010-04-06T14:57:37.803 回答
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";
}

但是,如果您坚持手动滚动您自己的模板解决方案(而不是使用大量现有的 Perl 模板解决方案),那么您应该以正确的方式来做。具有各种输入类型的通用方法等...

此外,正如其他人在评论中指出的那样,通过模板解决方案将代码与 HTML 分离是有原因的——它极大地简化了维护。

于 2010-04-06T17:36:52.037 回答