- ベストアンサー
PHPとプルダウンメニュー
PHPで以下のことをやりたいのですが、どうしてもうまく出来ません。経験の有る方、どうぞ宜しくお願い致します。 2つのプルダウンメニューがあり、1つ目のプルダウンメニューから選択時、選択された値に関連する項目をDBより2つ目のプルダウンメニューに登録したいのです。 ちなみにDBはOracleを使用しています。 プルダウンメニューから選択時は、どのようなイベント(?)が発生するのでしょうか? もし、PHPで出来ない場合、他にどのような方法がありますか? 宜しくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
これって簡単そうで、結構難しいんですよね(^^; 良くある 1:都道府県を「プルダウン1」にて選択する 2:選択された都道府県により、その都道府県に属する市町村を「プルダウン2」にセットする て感じの奴でしょ? phpはサーバーサイドスクリプトなんで、クライアントの操作(一つ目のプルダウンを選択する行為)に関して、何ら回答をしてくれません。 では、どうするのか? これを説明しようとすれば、莫大な労力が必要ですので、ヒントだけ。 結論は、フレームとJavaScriptを利用すます。 まず、そのページをフレームで構成します。 <html> <head></head> <frameset cols="*,0"> <frame src="main.php" name="main"> <frame src="hidden.php" name="hidden" scrolling="no"> </frameset> <noframes> </noframes> </html> こうしておいて、main.phpとhidden.phpを作っておきます。 hidden.phpはユーザーが意識しなければ、見えません (<frameset cols="*,0">と表示範囲を0にしているから) で、main.phpでプルダウン1が選択されたとき、その選択されたセル(当然プルダウン1)をJavaScriptで todofuken=document.input.elements[i].value; top.hidden.location.href ="hidden.php?id="+todofuken+"&cel_num="+i; といった形で、hidden.phpに送ってやります。 ここでcel_numとは、返値が入るセル、つまりプルダウン2を指します。 続いて、hidden.phpは、$_GET["todofuken"]と$_GET["cel_num"]という二つのデータを受け取ります。 まず、todofukenで、プルダウン1で選択された都道府県が分かるので、それを元にsql文を発行します。 上記の例では、 $sql="SELECT sichosoun FROM tabele_name WHERE todofuken="$_GET[todofuken]"; の様な感じですね。 で、抽出されたデータを同様の手順でmain.phpに戻してやるのです。 と、書いてきましたが、これだけで理解できれば、凄いです(笑) 我ながら凄く意味が分かりにくい(^^; と言うか、9091さんがやりたいことは、凄く分かりにくいことなのです。 ただ、理論的にはこれで可能ですし、私は何度もこの手のコードをこの方法で書いてきました。 頑張ってください
その他の回答 (1)
- duckling
- ベストアンサー率47% (88/185)
# 1 の方もおっしゃっているように、 サーバサイドスクリプトでは、 プロダウンメニューが選択された時に発生するイベントというものはありません。 なので、クライアントサイドスクリプトに頼ることになるのですが、 私も違う方法を考えてみました。 #------------------------------------------- プルダウン1から呼び出される可能性がある変数を あらかじめJavaScriptの変数に格納しておく。(笑 <荒技です。 そして、JavaScriptで <select>のOnChangeの時に プルダウン2の中身をJavaScriptで形成する。 #------------------------------------------- ちなみに、この方法は使ったことはないので 使える(有用)かどうかは分かりません。かなりの荒技ですし。(笑 (情報が少ない場合はいいのでしょうが。) もうひとつは、 #------------------------------------------- JavaScript の OnChange 時に、 選択されたselectをURLに格納し、JavaScript の location.href で飛ばし、 PHPでページごと再表示する。 #------------------------------------------- こんな感じですね。こっちは正攻法といった感じですが。 あとは言語を変えるしかないかも知れませんねぇ。