-1

後でフォームの記入を完了できるように、個人のフォームデータを保存できるフォームを作成しようとしています。データを外部ファイルに保存するのに問題はありません。ユーザーが全ページのフォームに入力した後でのみデータの保存を許可されていれば、私がやろうとしていることを簡単に実行できることを知っています。ただし、複数のページの1つが完全に完成していなくても、いつでもフォームのデータを保存できるようにしたいと思います。また、CGI.pmフォームコマンドを呼び出す代わりに、Perlスクリプトを介して独自のhtmlスクリプトを使用するのが好きです。

そのため、ユーザーはセッションの終了時に不完全なデータを保存し、後でパスワードを使用してログインしてデータを取得します。だから私はパスワードに基づいて外部ファイルからデータを取得します

#--------------------------------------------
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 に答える