アプリ版:「スタンプのみでお礼する」機能のリリースについて

CGI超初心者です。

htmlファイルに設置したテキストボックスの値によって
CGIで表示させる内容を変えたいです。
ネットで検索してコードを作成してみたのですが
うまくいきません。
どのように修正すればいいのでしょうか?

test.html----------------------------------------

<FORM action="test.cgi" method="POST">
変数を入力
<INPUT type="text" name="hen">
<INPUT TYPE="submit" VALUE="送り">
</FORM>

-------------------------------------------------


test.cgi-----------------------------------------

#!/usr/local/bin/perl

$h = $FORM{'hen'};

print "Content-Type: text/html; charset=Shift_JIS\n\n";
print "<html>\n";
print "<head><title>サンプル</title></head>\n";
print "<body>\n";

if ($h > 50) {
print "<p>変数hの内容は50より大きいです。</p>\n";
} else {
print "<p>変数hの内容は50より小さいです。</p>\n";
}

print "</body>\n";
print "</html>\n";

exit;

-------------------------------------------------

テキストボックスに、50以上の数字を入力しても、50以下の数字を入力しても
どちらも
「変数hの内容は50より小さいです。」
と表示されてしまいます。

よろしくお願いいたします!

※ 前回の質問(http://oshiete.goo.ne.jp/qa/8179935.html
より、CGIは使わない方向で検討中ですが
CGIに途中まで足をつっこんでしまい、
気になったので質問させていただきました。

A 回答 (2件)

書かれているプログラムだと $FORM の中身は空っぽです。



まずはフォームから送られてきたデータを変数に入れましょう。
下記のようなプログラムで変数に入れることができます。

if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $str, $ENV{'CONTENT_LENGTH'});
} else {
$str = $ENV{'QUERY_STRING'};
}

foreach $i (split('&', $str)) {
$i =~ tr/+/ /;
$i =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
($t1, $t2) = split('=', $i);
$FORM{"$t1"} = $t2;
}
    • good
    • 0
この回答へのお礼

ありがとうございます!

いただいたコードをそのまま貼り付けたら正常に動作するようになりました!
今後もっと勉強します。
大変助かりました!
ありがとうございました!

お礼日時:2013/07/18 13:20

CGIでPOSTのデータを受け取るには、



read(STDIN, $data, $ENV{'CONTENT_LENGTH'});

のように受け取る必要があります。

この形で受け取ると、

$data の中に hen=20&submit=%91%97%82%e8

というようなデータが格納されますので、
この文字列を分割して、変数に分けて・・・
(詳しいコードは参考URLを参照ください!)
という形で利用できるようになると思います。

PHPでは $_POST['hen'] の形で受け取ることができますが、
CGIではひと手間必要な形ですね。

参考URL:http://www.aimix.jp/cgi/syohofrmgetvw.html
    • good
    • 0
この回答へのお礼

ありがとうございます!

>PHPでは $_POST['hen'] の形で受け取ることができますが、
>CGIではひと手間必要な形ですね。

私が参考にしていたものが、PHPとCGIでまざっていたんですね・・・。
勉強になりました!
ありがとうございました!

お礼日時:2013/07/18 13:20

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