• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:セレクトメニューの値が旨く得られない)

セレクトメニューで値が得られない?

このQ&Aのポイント
  • PHP初心者がセレクトメニューで選択された値が変数に入らない問題を解決したい。
  • MySQLのテーブルからデータを読み出し、セレクトメニューで選択された値を変数に入れる方法を知りたい。
  • セレクトメニューは正常に表示されるが、選択された値が変数に入らない問題について教えてほしい。

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

  • ベストアンサー
  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.1

こんばんは。 簡単に、改善のポイントだけ書きますね。 (1)値をとりたい<select>タグは、<form>~</form>の間にあることが必要 (2)<option>タグ中に value 属性が必要(の はず) (3)submit ボタンをクリックしたときに<select>タグの内容を得るための $chimei = $_REQUEST['chimei']; という命令が、プログラム中で必要 です。参考にしてください。

robotanmarch
質問者

お礼

$body .="地 名  <SELECT name = 'chimei'>"; $body .= "<option selected> "; $body .= "<option> 東京 $body .= "<option> 名古屋"; </select> 補足で間違っておりました。 最後の一行は要りません。 上記が正解です。 すみません。

robotanmarch
質問者

補足

早速のご回答有り難う御座います。 (1)のFORMの件は、SELECTタグがFORMの間に入ってい   ますので大丈夫ですね。 (2)はVALUEが無い場合は、OPTIONの値がそのままわたさ   れますね。それで、このままでOKですね。 (3)試して見ましたが、駄目でした。 しかし、OPTIONの値を、ダイレクトに設定すると、問題なく値が渡されます。FOR文で値を入れると駄目なのです。 例えば、 $body .="地 名  <SELECT name = 'chimei'>"; $body .= "<option selected> "; $body .= "<option> 東京 $body .= "<option> 名古屋"; $body .= $option[$cunt] = '<OPTION>'.$arychimei[$cunt]; これなら旨く値が渡されます。

その他の回答 (4)

  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.5

レスありがとうございます。まず、回答しますね。 $_REQUEST['~~']  は、プログラムのできるだけ先頭のほうに、入れてあげてください。そうすればプログラムのどこででも、その値を参照できるようになりますからね。  いや~、良かったですー robotanmarch さん! これで私も安心しました。今回のご質問によって、PHPに関して大きく進歩されたことと思います。  わからないことは遠慮しないで、ご自身の納得できるまで尋ねようとする姿勢には、感服です。robotanmarch さんは、きっと良いエンジニアになられることでしょう。  あと私の回答の中でけっこうキツい表現の部分があったこと、ひらにご容赦ください。  また何かありましたら、このコーナーでお尋ねになってみてください。もし私が見つけたら、わかる範囲でお答えしたいと思いますので。  では、頑張ってくださいね!

robotanmarch
質問者

お礼

色々お世話になり有り難う御座いました。 これからも、少しずつですが勉強しながら頑張って行きたいと思います。非常に参考になりましたご指導を有り難う御座いました。 まだまだ道のりは遠いですけれど頑張ります。 有り難う御座いました。

  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.4

レスありがとうございます。 >下記の記述の件ですが、「$body .=」は、イコールではなく、$bodyの変数に、HTMLのタグの文字列を加えて、PHPでのHTMLを表示するためのテクニックなのです。 それは分かりますが、私の申し上げたいのは、同式内の2番目の「=」、すなわち「 $option[$cunt] = 」の「=」がなぜ必要か、ということなのです。 >それと、name = ’chime’は、同名で無ければ次に変数を渡すことが出来ません。 いや、名前が違っても「 $_REQUEST['~~']; 」の「~~」の部分を変更すれば大丈夫なのでは? >FOR文を使った部分にのみ何か問題が有るのかを… うん、一箇所、気がついた点がありました。それは for 文。いま「 for($cunt=0; $cunt<=$i; $cunt++){ 」になってますが、 「 ... $cunt<$i; ... 」 が正解じゃないかと。質問者さんのコードだと、$iが3のとき、ループを4回まわってしまうことになり、<OPTION> が ひとつ余計にできてしまうのでは?と思いました。

robotanmarch
質問者

お礼

度々のレス、本当に有り難う御座います。 「私の申し上げたいのは、同式内の2番目の「=」、すなわち「 $option[$cunt] = 」の「=」がなぜ必要か、ということなのです。」 上記の件は理解致しました。そうですね。考えて見れば必要有りませんね。 さらに、配列変数に入れ組み立てようとしていました。必要の無いことを理解致しました。有り難う御座いました。 下記の件も有り難う御座いました。 余分に1回回っており、余分のOPTIONが出来ており、スペースが表示されておりました。 修正を致しました。有り難う御座いました。 「 ... $cunt<$i; ... 」 しかし、未だ根本的には解決しておりません。 「名前が違っても「 $_REQUEST['~~']; 」の「~~」の部分を変更すれば大丈夫なのでは?」 このアドバイスに従い挑戦してみます。 しかし、この記述をどこに入れれば良いのかが分かりません。 <INPUT ~ ~ > の値を渡す為のSUBMITの所でしょうか。余り、良く分からないので困っております。 どうか、宜しくお願い致します。

robotanmarch
質問者

補足

hkd9001さん有り難う御座いました。 お陰様で旨く動きました。 有り難う御座いました。 本当はお礼の所でお礼を申し上げたかったのですが、先程続けて質問を書きましたのでふさがっており、補足内容に書いております。 本当に有り難う御座いました。 原因は、やはり「<FORM> ~ </FORM>」の挿入位置が悪かったのです。質問の記述は正しかったのですが、私自身の本当のプログラムが間違っておりました。よく見ればとんでもないところに入っておりました。恥ずかしいです。 FOR文も参考になり助かりました。 ちゃんと旨く変数の値渡しが出来ましたので喜んでおります。 私のような馬鹿な初心者に助言を戴きまして本当に有り難う御座いました。まだまだこれからも疑問点が出てくるかと思いますが、どうか宜しくお願い申し上げます。 hkd9001さん本当に有り難う御座いました。 robotanmarch

  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.3

レスありがとうございます。 まず、おわびです: (1)の、<form>… の件は、私のカンちがいというか、見誤りでした.申し訳ないです。 (2)も… そうでした。お恥ずかしい! さて本題ですが、for ループを使うと値がうまく取れない件。 $body .= $option[$cunt] = '<OPTION>'.$arychimei[$cunt]; の式なんですが、「=」が ふたつ入ってしまっていますねー。 ここは $body .= $option[$cunt]."<OPTION>".$arychimei[$cunt]."</OPTION>" と変更すれば、うまく行くのではないかな。 あと、#2 さんもおっしゃっていたけど、 $body .= "<INPUT type = 'hidden' name = 'chimei' value = '$chimei'>"; は名前を変更するか、これ自体を削除する必要があるでしょうね。 もし追加でご質問あれば、どうぞ。

robotanmarch
質問者

補足

早速のレス有り難う御座います。 下記の記述の件ですが、「$body .=」は、イコールではなく、$bodyの変数に、HTMLのタグの文字列を加えて、PHPでのHTMLを表示するためのテクニックなのです。 $body .="<html> <br><br> <p><HR></html>"; このような使い方をします。PHPで簡単にHTMLの表示ができます。 この記述の最後で、「print $body;」でHTMLを表示させます。 ですから、これは、全く問題ありません。 $body .= $option[$cunt] = '<OPTION>'.$arychimei[$cunt]; print $body; それと、name = ’chime’は、同名で無ければ次に変数を渡すことが出来ません。変数名を変更すれば、どの変数の中身を渡せばいいか、プログラムでは判断出来ないと思います。勿論受け取る側は同名でなくても良いでしょうけど。今送りタイのは、「'chimei'」なのです。 それと、ダイレクトにOPTIONを指定すると何も問題が全くないのです。この同じ記述方法でダイレクトにOPTIONを指定している部分だけ旨く変数渡しが行われています。それで、FOR文を使った部分にのみ何か問題が有るのかを教えて戴きたいと思っております。 お世話掛けますが宜しく御願い致します。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

selectとhiddenに同じchimeiという名前をつけているので 競合していますね。 そもそもhiddenで得る必要がないと思いますが・・・

関連するQ&A