• 締切済み

なんで?

プルタウンメニューに書いてある内容を選び実行したら 文字がでるというプログラムを前に質問したときのソースコードを参考に作りましたがその文字が表示されません。 記述エラーなしでちゃんと動作します。 でも文字が表示されません。 ソースコードはこれです。 #!/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); 何が間違っているのでしょうか?

みんなの回答

  • maura
  • ベストアンサー率46% (48/104)
回答No.3

#!/usr/local/bin/perl use strict; 2行目に上記のコードを追加するとエラーがでます。 まずこのエラーが出ないようにするのが先決でしょうね。

  • W_H
  • ベストアンサー率47% (21/44)
回答No.2

まず構造に突っ込みどころがあるようにも思われます。 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)
回答No.1

これCGIですよね。 どこがというより根本的にCGIの動作をわかっていないように思えます。 </html>まで送ったところでブラウザはその先はレンダリングしませんよ? 新たに描画しなおさせたいのなら、JavaScriptを使うなりして ブラウザ側からアクション起こさないとダメです。 これまでの質問の傾向から判断するに、適当な入門書を 読むことをお勧めします。

関連するQ&A