• ベストアンサー

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初心者です。どうかご指導宜しくお願いいたします。

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

  • ベストアンサー
  • koke29
  • ベストアンサー率58% (114/196)
回答No.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での処理も考慮してみて下さい

meet88
質問者

お礼

koke29様 お蔭様で出来ました。本当にありがとうございますm<_ _>m onChange="submit();"の不足のご指摘ありがとうございます。文法がわかっていないところ理解ができました。 当方で、うまく表示ができなかったのは、古いキャッシュが残っていて更新がうまく反映されていなかったようです。重ねましてkoke29様に感謝申し上げます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • koke29
  • ベストアンサー率58% (114/196)
回答No.2

例示されたセレクトメニューで動かすなら $_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の表示条件を設定して 完成って感じにすると思います

meet88
質問者

お礼

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>

meet88
質問者

補足

一応iframeを使えばできるのですが、その場合だとiframeの中にiframeがあり、さらにiframeともなり、スカスカの本体に細かいパーツがバラバラとあるといった状態になってしまうので、includeでなるべく一つのページとして整えることはできないのかと考えた次第です。

全文を見る
すると、全ての回答が全文表示されます。
  • koke29
  • ベストアンサー率58% (114/196)
回答No.1

セレクトメニューの切り替えはjavascriptで出来ます セレクトメニューのvalueにincludeするファイル名を指定して送信先のphp部分で include($_REQUEST[hoge]); などすればいけます (a1.htmlとかを選択するselectのnameがhogeに入る) javascript部分はサンプルとかあるので探してみて下さい

meet88
質問者

お礼

ご回答ありがとうございます。 まず初歩的な部分で、セレクトメニューと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>

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • includeすると?が入る

    win2000、PHP5.3.0にて、includeをすると?が入ってしまいます。 具体的には -- a.php -- <?PHP print "A"; include 'b.php'; print "B"; ?> -- b.php -- C <?PHP print "D"; ?> E -- 結果 -- A?C DE B ブラウザ上ではこの?が見えないのですが、ソース上ではあります。 この?を何とかしたいのですが、これは何かの設定ですか?仕様ですか?不具合ですか?

    • ベストアンサー
    • PHP
  • インクルード元を知りたい

    PHP5.2.4を使用しています。 [a.php] <?php include("b.php"); include("c.php"); $c = new classC(); [b.php] <?php class classB { } [c.php] <?php class classC { public function __construct() { $c = new classB();//←b.phpファイルがどこでインクルードされたか知りたい } } という3つのファイルがあり、a.phpにアクセスするとします。 c.phpファイルのコンストラクタでb.phpファイルにあるclassBを生成していますが、 これはa.phpファイルにおいて先にinclude("b.php");があるので c.phpファイル内でもclassBを認識できると思います。 そこでc.phpファイル内でb.phpファイルがどこでインクルードされたか(この例ではa.phpファイル) 調べる方法なり関数というのはあるのでしょうか?

    • ベストアンサー
    • PHP
  • includeされたphpの中でincludeを使用No.2

    http://oshiete1.goo.ne.jp/qa1156379.html こちらの方が質問しているものと同じ様なことなのですが、 簡単に構造を説明します。 a.php ->データを入力 b.phpを呼び出す b.php ->与えられたデータの入力チェック c.phpを呼び出す c.php ->データをDBに登録後、a.phpを表示 このとき、a.phpで登録ボタンを押すと、白紙が帰ってきてしまいます。 b.phpは呼び出しているようなのですが、b.php内のinclude_once("c.php"); で止まってしまっているように見えます。 アドバイスをお願いします。

    • ベストアンサー
    • PHP
  • テーブル内でのinclude

    test.php内にテーブルがあり、1行目でa.phpをincludeし、2行目でb.phpをincludeしています。 <test.php内の仕組み> test.phpではa.php内のボタンでb.phpをincludeする仕組み =「a.php内のフォームのsubmitで自分自身にb.phpのファイル名を渡している」 ●実現したいこと b.phpを開くときにはa.phpを再度読み出し直したいです。 具体的には a.php内のボタンを押してb.phpのファイル名をpost(post先はtest.php)してb.phpがincludeされたときにb.phpからa.phpがincludeされる。 【a.phpの再読込が必要な理由】 a.phpはDBからの表示があり、ボタンを押した際にDBへの書込みがあります。その情報をリフレッシュさせるためです。 ●試してみたこと (1)<試し> test.php内の<body onload=~>で再度test.phpを読み出した。  ⇒無限ループになってしまいました。   a.phpには<body>無いので同様の動作ができません。   他に動作させる方法があれば問題ないですが・・・。 このような状況です。できればフレームでは実行したくないと考えています よい方法あれば教えてください。

    • 締切済み
    • PHP
  • fputsで書き込みを行う際に、includeを使用したいです。

    phpの初心者です。 どうぞよろしくお願いします。 ユーザーがクリックしただけでページが生成されていくといったような サイトを現在作成しています。 以下、構造です。 index.php regist.php footer.inc page(dir)---a(dir)-------index.php       └b(dir)-------index.php       └c(dir)-------index.php 動作としては、index.php(TOP階層)でリンクをクリックするとregist.phpにジャンプし、 regist.phpのプログラムの中で、page(dir)の中にa,b,c,d,e…とディレクトリが 自動生成されて、中にindex.phpファイルを生成します。 regist.phpの最後でheader("Location:")を使用し、生成されたページに自動的にジャンプします。 生成されたページのフッターに今までクリックされたリンクという紹介のようなものがあります。 そこの記述が regist.php内の記述/////////////////// ob_start(); include("footer.inc"); $footer = ob_get_contents(); ob_end_clean(); fputs($fp, "$footer"); footer.inc内の記述/////////////////// <?php $arr = scandir('./page/', 1); foreach($arr as $key => $dir){ //リンク名を日本語に変換 $dir = str_replace("http://".$domein."/page", "http://".$domein."/page/", "$dir"); print "<a href=\"http://".$domein."/page/".$dir."/\">$dir_url</a> \n"; } ?> 上記のようなプログラムですと、a,b,c,d…x,y,zと順番にディレクトリとページが生成されていった場合に aの中のindex.phpではリンクなし。 bの中のindex.phpではaへのリンク。 cの中のindex.phpではaとbへのリンク。 dの中のindex.phpではaとbとcへのリンク。 eの中のindex.phpではaとbとcとdへのリンク。 一つずつリンクが増えていくようになってしまってます。 これを、自動生成されたページでは、常にクリックされたすべてのリンクが出るようなものにしたいというのが希望です。 aの中のindex.phpではaとbとcとdへのリンク。 bの中のindex.phpではaとbとcとdへのリンク。 cの中のindex.phpではaとbとcとdへのリンク。 dの中のindex.phpではaとbとcとdへのリンク。 eの中のindex.phpではaとbとcとdへのリンク。 なのでregist.phpの記述を… 修正後:regist.php内の記述/////////////////// fputs($fp, "<?php include(\"../../footer.inc\"); ?>"); こちらですと、読み込み形式になり常に新しい情報が入るかな?と思い試したのですが思うように動きません。 修正前:regist.php内の記述/////////////////// ob_start(); include("footer.inc"); $footer = ob_get_contents(); ob_end_clean(); fputs($fp, "$footer"); 上記ですと、テキストを書き込む形になりますので、常に新しい情報ではありません…。 分かる方、ご回答頂けますと幸いです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • セレクトメニューに文字列をセットする方法

    JavaScriptを勉強し始めてまだ1ヵ月の初心者です。 どうしても分からず先に進めません。どうか、教えて下さい。 よろしくお願い致します。 下記の文字列を配列や連想配列などを使用して、二段構えのセレクトメニューを作成したいのです。 ちなみに、PHPでHIDDENを使用して文字列をセットしています。 A0,0001,あああ,A0,0002,いいい,B0,1111,かかか, B0,1112,ききき,B0,1113,くくく,C0,1500,さささ… このような文字列を使用し、「A0,0001,あああ」が1レコードのイメージです。 一つ目のセレクトメニューで、頭のA0,B0,C0…を選択し、さらに二つ目のセレクトメニューでは、 一つ目で選択したものによって選択されたものの後半部分がそれぞれメニューに表示されるようにしたいのです。 自分なりにいろんなサイトや書籍で調べてみたのですが、分かりませんでした。 質問の内容も分かり難いかと思いますが、どうぞ宜しくお願い致します。

  • include_onceで呼び出したPHPファイル

    PHPでサイトを組んでいるのですが、include_onceで以下のようにPHPの各ファイルを呼び出して実行しているのですがうまくいきません。 <?php //レンタルサーバーのcronを利用して、定期的に走らせるコードです。 include_once "example_a.php"; include_once "example_b.php"; include_once "example_c.php"; ?> 各ファイルは、RSSで読み込んだデータをMySQLに格納するプログラムです。 個別で各ファイルを実行すると正しい結果となりますが上記のようなプログラムでまとめて実行するとexample_a.phpは正しい結果となりますが、example_b.php、example_c.phpは正しく処理されません。 原因として考えられるものがあれば、教えていただきたいと思います。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • include_pathについて。

    PHP 5.2以上のバージョンの話として質問をさせて頂きます。 (ローカルではWindows版XAMPPを使用。リモートはLinuxサーバー。) ----- <ファイルの位置関係> imgディレクトリ --- C.jpg (画像ファイル) mainディレクトリ --- A.php sub ディレクトリ --- funcディレクトリ --- B.php (img、main、subディレクトリは3つとも同階層) //------- (A.phpの記述) require_once '../sub/func/B.php'; //------- (B.phpの記述) echo '<img src="C.jpgのパス">'; // ←■画像Cを表示したい■ //★どう表示されるかテスト★ echo dirname(__FILE__) ;   //----- このような状況で、 A.phpにアクセスすると、★テスト★の所は、 ~/sub/func   //←のように表示される。 // つまりこれは、__FILE__ は、 // A.phpではなく、B.phpを指している。(?) と、このような時、B.phpの中で、 C画像の相対パスは、どう書いたらよろしいのでしょうか? A.phpから見た、C画像の相対パスで書いたらいい? それとも、B.phpから見たソレでしょうか? phpinfo()でinclude_pathの項目を調べると、 .:/usr/local/lib/php/~ のように書かれています。(デフォルトのままです。)

    • ベストアンサー
    • PHP
  • php include がどうしてもできません;;

    php include がどうしてもできません;;; php、超がつく程初心者です; Windows7、Internet explorer9、Apache2.2、PHP5.4.6、現在はlocalhost上でphp動作確認、 作業しております。 サイトのメニューをPHPで作成したいと思い色々必死に調べ、htdocsフォルダ直下同士?のphpは何とか表示させることができました。(localhostですが) しかしhtdocsより下のフォルダに入っているものですと、例え同階層でも表示がされません; ↓のような感じで完全に詰まってしまいました; htdocs/index.html に htdocs/topmenu.php を表示させる↓ htdocs/index.html内で <?php include(dirname(__FILE__).'/topmenu.php'); ?> → 成功 htdocs/naiyou/naiyou1.html に htdocs/naiyou/menu.php を表示させる↓ htdocs/naiyou1.html 内で <?php include(dirname(__FILE__).'/menu.php'); ?> → 失敗 htdocs/naiyou/naiyou1.html に htdocs/topmenu.php を表示させる↓ htdocs/naiyou1.html 内で <?php include(dirname(__FILE__).'/../topmenu.php'); ?> → やっぱり失敗 htdocsフォルダ直下のみでしかできない設定に私がしてしまっているのでしょうか。 元々直下のみしか表示できないもの…? それとももっと基本的なところでひかかっているのかな… 何かのパスが間違っているのでしょうか。 htdocsフォルダの場所とDocumentRootは共に "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs" となっています; 知識不足もあり言葉が足りないこと、説明がよく分からないことも多いこともあるかと…すみません。 既出の質問等も探しているのですが同条件を中々見つけられず、もうかれこれ1ヶ月近く解決せず悩んでいます。 申し訳ありませんが、どなたかご教授ください...;

    • ベストアンサー
    • PHP
  • selectを利用して1つだけ表示したいのですが

    はじめましてphp初心者です 計算をしたphp3つのデーターを計算し、 html側からのserect選択で1つだけ答えをphp側に表示させたいのですが うまくprint表示してくれません 以下の内容で行っております HTML側 <form action="http://localhost/test/**/**.php" method="post"> <select name="d" size=1> <option value = "d1">データー1の答え</option> <option value = "d2">データー2の答え</option> <option value = "d3">データー3の答え</option> <option value = "d4">データー4の答え</option> </select> <input type = "submit" value = "表示"> php側 <?php $a = 5; $b = 2; $c = 4; $d = $_POST["d"] ?> <?php //値を取得 $a = $a; $b = $b; $c = $c; $d = $_POST['d']; //セレクトボックスによって処理を変える switch ($d) { case "d1": $answer = $a + $b - $c; break; case "d2": $answer = $a + $b + $c; break; case "d3": $answer = $a - $b - $c; break; case "d4": $answer = $a - $b + $c; break; default: break; } //計算結果を表示 //print ($a." ".$b." ".$c.".$answer."\n"); ?> 計算を表示の部分でおかしくなっていると思うのですが、 根本的に間違えている可能性もあります。 数日悩んでしまい、頭がこんがらがって何が間違っているのかすら 分からなくなってしまっています。 どなたかご教示ねがいませんでしょうか?

    • 締切済み
    • PHP