こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

CGIでテキストボックスの内容によって条件分岐

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://okwave.jp/qa/q8179935.html
より、CGIは使わない方向で検討中ですが
CGIに途中まで足をつっこんでしまい、
気になったので質問させていただきました。

投稿日時 - 2013-07-18 11:38:38

QNo.8181331

すぐに回答ほしいです

質問者が選んだベストアンサー

書かれているプログラムだと $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;
}

投稿日時 - 2013-07-18 11:58:22

お礼

ありがとうございます!

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

投稿日時 - 2013-07-18 13:20:40

ANo.1

このQ&Aは役に立ちましたか?

7人が「このQ&Aが役に立った」と投票しています

回答(2)

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

投稿日時 - 2013-07-18 11:58:40

お礼

ありがとうございます!

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

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

投稿日時 - 2013-07-18 13:20:00

あなたにオススメの質問