Perl&HTML:複数のsubmitボタンを判断する
メモ:
HTMLに複数のボタンを配置し、どのボタンが押されたかをPerlで判断する。
<起動側CGI(test1.cgi)>
#!c:¥perl¥bin¥perl
# CGI submit テスト
print <<"EOL";
Content-type: text/html; charset=iso-2022-jp
<html>
<head><title>TEST1</title></head>
<body>
<form action="test2.cgi" method=post>
<input type=submit name="ok" value="OK">
<input type=submit name="back" value="戻る">
</form>
</body></html>
EOL
exit 0;
<起動されるCGI(test2.cgi)>
#!c:¥perl¥bin¥perl
# CGI submit テスト(2)
&GetCgiParams; # CGIデータ取得
$back = $param{‘back’};
$ok = $param{‘ok’};
print <<"EOL";
Content-type: text/html; charset=iso-2022-jp
<html>
<head><title>test2</title></head>
<body>
ok=($ok)<br>
back=($back)<br>
</body></html>
EOL
exit 0;
sub GetCgiParams{
if ($ENV{"REQUEST_METHOD"} eq "POST"){
read(STDIN, $buffer, $ENV{"CONTENT_LENGTH"});
} else {
$buffer = $ENV{"QUERY_STRING"};
}
# デコード
$buffer =~ tr/+/ /;
$bufferMoto = $buffer; # 元を控える
$buffer =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
# フォーム入力データの取り出し
@pairs = split(/&/,$buffer);
foreach(@pairs){
my ($key, $value) = split(/=/, $_);
$value =~ s/[¥n¥r]//g; # 改行コードの削除
$value =~ s/[<>]//g; # HTMLコードの無効化
$value =~ s/ //g; # スペースの削除
$param{$key} = $value; # CGIデータを連想配列に追加
}
return 0;
}