- ベストアンサー
includeで読み込む対象を選べるようにする
includeで読み込む対象をセレクトメニューで選べるようにし、さらにその先にもセレクトメニューがあり選べるようするというのは不可能でしょうか? 最初に(a.html、b.html、c.html、d.html)のいずれかを選択、読み込み。次にa.htmlを選んだ場合は(a_1.html、a_2.html、a_3.html、a_4.html)のいずれかを選択、読み込むといった内容です。 PHP初心者です。どうかご指導宜しくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
やりたいことのイメージ、ちょっとわかりました 一個目のセレクトメニューのファイルが <body> <formname="select1" method="post" action=""> <select name="hoge1" onChange="submit();"> <option value="0">選択</option> <option value="a">a</option> <option value="b">b</option> </select> </form> <? if($_REQUEST[hoge1] != NULL){ include("{$_REQUEST[hoge1]}.html"); } ?> </body> a.htmlとかのファイル <body> <? print <<<EOF <form name="hoge2" method="post" action="") <input type="hidden" name="hoge1" value="{$_REQUEST[hoge1]}"> <select name = "hoge2" onChange="submit();"> <option value="0">選択</option> <option value="{$_REQUEST[hoge1]}_1">1</option> <option value="{$_REQUEST[hoge1]}_2">2</option> <option value="{$_REQUEST[hoge1]}_3">3</option> <option value="{$_REQUEST[hoge1]}_4">4</option> </select> </form> EOF; if($_REQUEST[hoge2] != NULL){ include("{$_REQUEST[hoge2]}.html"); } ?> こんなのかなーと思うのですが、どうでしょう? イメージ違いますかねー 最初のサンプルは閉じをいくつか付け忘れておったもので動かないっすね スミマセン… type="submit ←これの"最後が抜けてる のと?>を忘れてました meet88様のコードはsubmitが無いので動かないですよ(書き忘れ?) ※たぶん選択と同時に送信したいんだろうと思ったので 今回のサンプルには onChange="submit();" が入っています で、こういう処理はきっとjavascriptの方が得意だろうなーとは思うので 何ならそちらの方向で調べてみても良いかもしれないですね とりあえず処理イメージもこれでいいのかわからないので 宜しければ試してみてから、javascriptでの処理も考慮してみて下さい
その他の回答 (2)
- koke29
- ベストアンサー率58% (114/196)
例示されたセレクトメニューで動かすなら $_REQUEST[1]にしないと動かないですよ <select name = "1"> なら $_REQUEST[1] <select name = "a"> なら $_REQUEST[a] <select name = "hoge"> なら $_REQUEST[hoge] これでルールはわかりますよね? そして、セレクトの動きをわたくし勘違いしておりました 1つ目の結果で2つ目のvalueを動的にするのかと思ってましたが 段階を踏んでincludeしていくってことですよね? それならPHPとHTMLだけで作れます(javascript不要) 処理するファイルは一個にしたいんでしょうか? 詳細はわからないので推測込みで処理の流れにを書いてみます 1.a.htmlなどを選択するselectを表示、選択後submit 2-1.1から送信されたデータを元にファイルをinclude 2-2.1から送信されらデータを元にselectフォームを表示 3.2から送信されたデータを元にファイルをinclude として、これを私が作るとしたら… <body> <form name="hoge1" method="post" action="") <select name = "hoge1"> <option value="a">a</option> <option value="b">b</option> <option value="c">c</option> <option value="d">d</option> </select> <input type="submit value="1コ目"> </form> <?php if($_REQUEST[hoge1] != NULL){ include("{$_REQUEST[hoge1]}.html"); print <<<EOF <form name="hoge2" method="post" action="") <select name = "hoge2"> <option value="{$_REQUEST[hoge1]}_1">1</option> <option value="{$_REQUEST[hoge1]}_2">2</option> <option value="{$_REQUEST[hoge1]}_3">3</option> <option value="{$_REQUEST[hoge1]}_4">4</option> </select> <input type="submit" value="2コ目"> </form> EOF; } if($_REQUEST[hoge2] != NULL){ include("{$_REQUEST[hoge2]}.html"); } </body> これが基本の形 このまま実行すると2つ目のincludeを行うまでは、1つ目のformも表示 しっぱなしになってしまうので、ifで1つ目のformの表示条件を設定して 完成って感じにすると思います
お礼
koke29さん ご返答ありがとうございます。 セレクトの動きですが、段階を踏んで入れ子のようにincludeしていくということです。 最初のセレクターで(a.html b.html c.html d.html)のいずれかを選択表示。a.htmlを選んだ場合、その中にもう一段セレクターがあって、(1.html 2.html 3.html 4.html)のいずれかをa.htmlの中にincludeさせるといった内容です。 それとご教授いただいたものが表示できていません。部分的に変えたりして試しているのですが・・ 単純なところで下記でも普通は表示されるのでしょうか? PHPのバージョンはver.5.2.6 です。 <body> <select name = "hoge"> <option value="a.html">a</option> <option value="b.html">b</option> <option value="c.html">c</option> <option value="d.html">d</option> </select> <?php include($_REQUEST[hoge]); ?> </body>
補足
一応iframeを使えばできるのですが、その場合だとiframeの中にiframeがあり、さらにiframeともなり、スカスカの本体に細かいパーツがバラバラとあるといった状態になってしまうので、includeでなるべく一つのページとして整えることはできないのかと考えた次第です。
- koke29
- ベストアンサー率58% (114/196)
セレクトメニューの切り替えはjavascriptで出来ます セレクトメニューのvalueにincludeするファイル名を指定して送信先のphp部分で include($_REQUEST[hoge]); などすればいけます (a1.htmlとかを選択するselectのnameがhogeに入る) javascript部分はサンプルとかあるので探してみて下さい
お礼
ご回答ありがとうございます。 まず初歩的な部分で、セレクトメニューとPHPの連動がわかりません。 単純に下のように書いてはみましたが動かず。この部分はどうしたらいいのでしょうか? <body> <select name = "1"> <option value="a.html">a</option> <option value="b.html">b</option> <option value="c.html">c</option> <option value="d.html">d</option> </select> <?php include($_REQUEST[hoge]); ?> </body>
お礼
koke29様 お蔭様で出来ました。本当にありがとうございますm<_ _>m onChange="submit();"の不足のご指摘ありがとうございます。文法がわかっていないところ理解ができました。 当方で、うまく表示ができなかったのは、古いキャッシュが残っていて更新がうまく反映されていなかったようです。重ねましてkoke29様に感謝申し上げます。