プロが教える店舗&オフィスのセキュリティ対策術

htmlのフォームに記入してもらった内容を、そのままデータに書き込むcgiに送信するのではなく、一回内容を表示した確認cgiをはさみたいのですが、どうすればよいのでしょうか。
とりあえず、今の状態は、htmlファイルから読み込むデータを"name","mail","coment"の3つとしてます。

enquete.htmlファイルの一部:
<FORM method="POST" action="enquete.cgi">
<TABLE>
<TR>
<TD>名前</TD>
<TD><INPUT type="text" name="name"></TD>
<TD>メールアドレス</TD>
<TD><INPUT type="text" name="mail"></TD>
<TD>コメント</TD>
<TD><INPUT type="text" name="coment"></TD>
</TR>
<INPUT type="submit" value=" 送 る ">   
<INPUT type="reset" value="やり直す">

のような感じです。
これに確認cgiをはさんで、

enquete.html"確認ページへ"
→kakunin.cgi"送る"
→enquete.cgi"戻る"

みたいな構成にしたいのですが、kakunin.cgiの実装の仕方を教えてください。また、それにともない、直す箇所も教えてください。
おねがいします。

A 回答 (2件)

#!C:/Perl/bin/perl


read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
@pairs=split(/&/,$buffer);
foreach $pair (@pairs){
($name,$value) = split(/=/,$pair);
$value =~ tr/+/ /;
$value =~ s/%(..)/pack("C",hex($1))/eg;
$cgi{$name} = $value;
}
print "Conten-type: text/html;charset=\"shift_jis\"\n\n";
print "<html>\n";
print "<b>確認<br>\n";
print "<TABLE border>\n";
print "<TR>\n";
print "<TD>名前</TD>\n";
print "<TD>$cgi{'name'}</TD>\n";
print "<tr><TD>メールアドレス</TD>\n";
print "<TD>$cgi{'mail'}</TD>\n";
print "<tr><TD>コメント</TD>\n";
print "<TD>$cgi{'coment'}</TD>\n";
print "</TR>\n";
print "</TABLE>\n";

print <<"AAA";
<form action = "okuru.cgi" method="post">
<INPUT type="hidden" name="name" value="$cgi{'name'}">
<INPUT type="hidden" name="mail" value="$cgi{'mail'}">   
<INPUT type="hidden" name="coment" value="$cgi{'coment'}">
<input type="submit" value="送信">
</form>
AAA

print "</BODY></HTML>\n";

こんな感じで入力したデータを確認できますよ。これを
kakunin.cgiとして試してみて下さい。
    • good
    • 0
この回答へのお礼

ありがとうございます!作動しました!
ですが、
print""うんたら
のところはサブルーチン化してperlで書けるでしょうか??perlでかけたほうが楽になるので。。
どことどこはサブルーチンとして書けるか教えてください。おねがいします。

お礼日時:2004/11/19 19:43

kakunin.cgiでは、受け取った3つのデータ"name","mail","coment"を表示。


加えて"name","mail","coment"のデータを再度送信するためのボタンを用意するのが常套手段じゃないかな?

再送信ボタンといっても普通のフォームに hidden でデータを用意する程度で十分機能します。
<input name="name" type="hidden" value="名前だよ">

データの汚染チェックを送信時と再送信時で、合わせて2回しないといけないのがちょっと面倒かな。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!