如何使用Perl将单选按钮标记为已选中?

时间:2010-04-06 14:45:10

标签: perl forms radio-button checked

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

有更方便或方便的方法吗?

2 个答案:

答案 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分离是一个原因 - 它极大地简化了维护。