- 締切済み
なんで?
プルタウンメニューに書いてある内容を選び実行したら 文字がでるというプログラムを前に質問したときのソースコードを参考に作りましたがその文字が表示されません。 記述エラーなしでちゃんと動作します。 でも文字が表示されません。 ソースコードはこれです。 #!/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); 何が間違っているのでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- maura
- ベストアンサー率46% (48/104)
#!/usr/local/bin/perl use strict; 2行目に上記のコードを追加するとエラーがでます。 まずこのエラーが出ないようにするのが先決でしょうね。
- W_H
- ベストアンサー率47% (21/44)
まず構造に突っ込みどころがあるようにも思われます。 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'})でも、間違いではありません。 一応変数の中身で真偽の判定はしてくれます。(今回の値は全て真ですが。)
- sakusaker7
- ベストアンサー率62% (800/1280)
これCGIですよね。 どこがというより根本的にCGIの動作をわかっていないように思えます。 </html>まで送ったところでブラウザはその先はレンダリングしませんよ? 新たに描画しなおさせたいのなら、JavaScriptを使うなりして ブラウザ側からアクション起こさないとダメです。 これまでの質問の傾向から判断するに、適当な入門書を 読むことをお勧めします。