Perlを使用してチェックされたときにラジオボタンをマークするにはどうすればよいですか?
-
24-09-2019 - |
質問
私は、フォームデータを保存できるフォームを作成して、後でフォームの完成を終了できるようにします。データを外部ファイルに保存するのに問題はありませんが、完全なページフォームが完成したら、ユーザーがデータを保存することを許可された場合、私がやろうとしていることを簡単に行うことができることを知っています。ただし、複数のページのいずれかが完全に完了していない場合でも、いつでもフォームのデータを保存できるようにしたいと考えています。また、CGI.pmフォームコマンドを呼び出す代わりに、自分のHTMLスクリプトをPERLスクリプトで使用するのが好きです。
そのため、ユーザーはセッションの最後に不完全なデータを保存し、後でパスワードでログインしてデータを取得します。そこで、パスワードに基づいて外部ファイルからデータを取得します
#--------------------------------------------
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>
";
それを行うためのより便利な、または便利な方法はありますか?
解決
はい、簡単な方法があります。
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
ループはより便利です。