10秒目をつむったら…

プルタウンメニューに書いてある内容を選び実行したら
文字がでるというプログラムを前に質問したときのソースコードを参考に作りましたがその文字が表示されません。
記述エラーなしでちゃんと動作します。
でも文字が表示されません。

ソースコードはこれです。

#!/usr/local/bin/perl

print "Content-Type: text/html\n\n";

print <<WC;
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>
<body bgcolor=#ffffff>

<select name=\"menu\">
<option value=\"1\">こんにちは</option>
<option value=\"2\">●●ですか?</option>
<option value=\"3\">ゲーム好きですか?</option>
</select>
<input type=\"submit\">


</body>
</html>
WC

if ($FORM{'1'}){
print "こんにちは\n";
} elsif($FORM{'2'}){
print "いいえ違います。\n";
} elsif($FORM{'3'}){
print "いいえキライです。\n";
}


exit(0);

何が間違っているのでしょうか?

A 回答 (3件)

まず構造に突っ込みどころがあるようにも思われます。


CGIの場合、全て実行した上で結果をパソコンに返します。なので、if文は実行されません。っと言うより、実行されても何一つ結果がありません。
なので、if文を始めに書き、データがある場合とない場合のページ分けをしないと、永遠にページは変わりません。

それよりも致命的なのが、フォームデータの受け取りです。
まず、<form>がないので、データを送れないというのも欠陥ですが、<selest>はデータを送るフォームです。
<select>は『名前しか設定できない』ものですから、値を設定できません。
じゃぁ、値は?っと思うでしょうが、それは<option>の中にあります。
<selest>にはname="menu"(名前)の設定項目がありますし、<option>にはvalue="1"(値)の設定項目しかないですよね?
それは、<select>は単体で値を遅れないし、<option>は単体で値に名前を与えることができないからです。フォームとは、名前と値がなければ意味の無いものですから、これは二つでセットなんですね。
つまり、受け取ったフォームの、$FORM{'menu'}の中に、1とか2とか3とかが入ります。$FORM{'1'}は、存在すらありません。

早い話、if文の中身が違います。
($FORM{'menu'}==1)などとするべきでしょう。

ちなみに、選択項目が二つで、値が0と1などという真と偽と判定されるようなものなら、($FORM{'menu'})でも、間違いではありません。
一応変数の中身で真偽の判定はしてくれます。(今回の値は全て真ですが。)
    • good
    • 0

#!/usr/local/bin/perl


use strict;

2行目に上記のコードを追加するとエラーがでます。

まずこのエラーが出ないようにするのが先決でしょうね。
    • good
    • 0

これCGIですよね。


どこがというより根本的にCGIの動作をわかっていないように思えます。
</html>まで送ったところでブラウザはその先はレンダリングしませんよ?

新たに描画しなおさせたいのなら、JavaScriptを使うなりして
ブラウザ側からアクション起こさないとダメです。

これまでの質問の傾向から判断するに、適当な入門書を
読むことをお勧めします。
    • good
    • 0

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