
プルタウンメニューに書いてある内容を選び実行したら
文字がでるというプログラムを前に質問したときのソースコードを参考に作りましたがその文字が表示されません。
記述エラーなしでちゃんと動作します。
でも文字が表示されません。
ソースコードはこれです。
#!/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);
何が間違っているのでしょうか?
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'})でも、間違いではありません。
一応変数の中身で真偽の判定はしてくれます。(今回の値は全て真ですが。)
No.3
- 回答日時:
#!/usr/local/bin/perl
use strict;
2行目に上記のコードを追加するとエラーがでます。
まずこのエラーが出ないようにするのが先決でしょうね。
No.1
- 回答日時:
これCGIですよね。
どこがというより根本的にCGIの動作をわかっていないように思えます。
</html>まで送ったところでブラウザはその先はレンダリングしませんよ?
新たに描画しなおさせたいのなら、JavaScriptを使うなりして
ブラウザ側からアクション起こさないとダメです。
これまでの質問の傾向から判断するに、適当な入門書を
読むことをお勧めします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CGI初心者です
-
Pythonのマルチプロセスでの並...
-
Perl 一定時間後にプログラムを...
-
プロトタイプ宣言のワーニング...
-
Perlでsub a($)のように$をつけ...
-
Pythonのプログラミングの質問...
-
LISPで連想配列の操作?
-
Perlで自分自身の関数名を知る...
-
JSONで文字列が長い時
-
Application.ScreenUpdating = ...
-
formで特定のinputを送信しない...
-
メモリをアドレスを直接指定し...
-
<SELECT>タグの折り返し
-
実行時エラー 3020の対策
-
【至急!!!】python言語で本を見...
-
文字の横にプルダウンを表示さ...
-
Pythonでコンソールをクリアす...
-
セレクトメニューで2つの項目...
-
sendmailで複数の宛先にメール...
-
子windowsからsubmit()後にclos...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プロトタイプ宣言のワーニング...
-
これは動いてくれますか??
-
Perlで複数の値を返す良い方法...
-
CGIから複数の別プログラムを同...
-
Rubyのgets関数について
-
dieやPerl自体でエラーが発生し...
-
Perl:計算誤差について
-
HASH(0xほげほげ)
-
内部処理形式が日付型 (Date) ...
-
引数の値をURLのパスに配列とし...
-
Perlで足し算をするには
-
Perlで自分自身の関数名を知る...
-
perlでテキスト複数行を関連付...
-
print <<"_HTML_"の中でサブル...
-
なんで?
-
Net::Telnetでタイムアウト時間...
-
foreach 回数制限
-
Pythonのマルチプロセスでの並...
-
JSONで文字列が長い時
-
Application.ScreenUpdating = ...
おすすめ情報