質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

2192閲覧

javascriptを使用したPHPの検索フォームに関して

winkle

総合スコア9

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2016/02/19 07:00

編集2016/02/19 07:14

javascriptを使用したPHPの検索フォームに関して質問です。

親データの中から一つ選択すると子データが選択可能になり、子データの中から一つ選択すると孫データが選択可能になるという検索フォームを作っているのですが、動きはjavascriptで制御されています(冗長になるので下のコードは孫なしで記述しています)。

各value値を次頁にGETで渡した際に子、及び孫の検索フォームの値を保持させたいのですが、現在のコードだと親の値のみ保持されて、子以下の値は保持されません。子以下の値まで含めて保持させるためには下のjavascriptの記述をどのように書き換えれば良いのでしょうか。

(フレームワークを使用しているので下記ソースは検索結果取得ページでも呼び出されます)

<select id="SEL1" name="SEL1"> <option value="">---</option> <?php foreach ($parent_list as $parent => $children_list) { echo '<option value="'.$parent.'"'; if ($parent == $_GET['SEL1']){ echo 'selected'; } echo '>'.$parent.'</option>'; } ?> </select> <!-- 子選択肢 --> <select id="SEL2" name="SEL2"> <option value="">---</option> <?php foreach ($parent_list as $parent => $children_list) { echo '<optgroup label="'.$parent.'">'; foreach ($children_list as $children => $grandson_list) { $view_children = str_replace($parent,"",$children); echo '<option value="'.$children.'"'; if ($children == $_GET['SEL2']){ echo 'selected'; } echo '>'.$view_children.'</option>'; } echo '</optgroup>'; } ?> </select> <script type = "text/javascript"> <!-- function ConnectedSelect(selIdList){ for(var i=0;selIdList[i];i++) { var CS = new Object(); var obj = document.getElementById(selIdList[i]); if(i){ CS.node=document.createElement('select'); var GR = obj.getElementsByTagName('optgroup'); while(GR[0]) { CS.node.appendChild(GR[0].cloneNode(true)); obj.removeChild(GR[0]); } obj.disabled = true; } if(selIdList[i+1]) { CS.nextSelect = document.getElementById(selIdList[i+1]); obj.onchange = function(){ConnectedSelectEnabledSelect(this)}; } else { CS.nextSelect = false; } obj.ConnectedSelect = CS; } } function ConnectedSelectEnabledSelect(oSel){ var oVal = oSel.options[oSel.selectedIndex].value; if(oVal) { while(oSel.ConnectedSelect.nextSelect.options[1])oSel.ConnectedSelect.nextSelect.remove(1); var eF = false; for(var OG=oSel.ConnectedSelect.nextSelect.ConnectedSelect.node.firstChild;OG;OG=OG.nextSibling) { if(OG.label == oVal) { eF = true; for(var OP=OG.firstChild;OP;OP=OP.nextSibling) oSel.ConnectedSelect.nextSelect.appendChild(OP.cloneNode(true)); break; } } oSel.ConnectedSelect.nextSelect.disabled = !eF; } else { oSel.ConnectedSelect.nextSelect.selectedIndex = 0; oSel.ConnectedSelect.nextSelect.disabled = true; } if(oSel.ConnectedSelect.nextSelect.onchange)oSel.ConnectedSelect.nextSelect.onchange(); } ConnectedSelect(['SEL1','SEL2']); //--> </script> コード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

親ページの情報を、

$_GET['SEL1']

として、SEL1で、送りだして受けているようなので、
同じ仕組みで、子ページの場合には、

$_GET['SEL1'] $_GET['SEL2']

と、2つの情報を送り出し、それを受けて
あとは、以下の既存コードと同じような感じで、

<?php foreach ($parent_list as $parent => $children_list) { echo '<option value="'.$parent.'"'; if ($parent == $_GET['SEL1']){ echo 'selected'; } echo '>'.$parent.'</option>'; } ?>

SEL2をのoptionタグを出力するコードを追加したらいかがでしょう???

投稿2016/02/28 02:29

ItoTomonori

総合スコア1283

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問