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

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

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

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

JavaScript

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

Q&A

解決済

3回答

26194閲覧

セレクトボックス内の変更

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

JavaScript

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

0グッド

0クリップ

投稿2016/03/29 08:52

編集2016/03/30 04:38

セレクトボックス①を変更するとセレクトボックス②が変更されるというパーツを作っています。
セレクトボックス②にはDBに登録されたものを抽出して表示させる予定です。

現状、セレクトボックス②には何も表示されていないので、DBからデータの受け渡しが出来ていない可能性が高いです。

分かる方がいましたらご回答よろしくお願い致します。

※21:21 コード修正

echo "<script>\n"; echo "function functionName(){\n"; echo "var select1 = document.forms.formName.area;\n"; echo "var select2 = document.forms.formName.selectName2;\n"; echo "select2.options.length=0;\n"; echo "if (select1.options[select1.selectedIndex].value == '東'){"; foreach($result as $row3){ echo "select2.options[] = new Option(" . $row3['shoplist'] . ");"; } echo "}\n"; echo "else if (select1.options[select1.selectedIndex].value == '西'){"; foreach($result as $row3){ echo "select2.options[] = new Option(" . $row3['shoplist'] . ");"; } echo "}\n"; echo "else if (select1.options[select1.selectedIndex].value == '南'){"; foreach($result as $row3){ echo "select2.options[] = new Option(" . $row3['shoplist'] . ");"; } echo "}\n"; echo "else if (select1.options[select1.selectedIndex].value == '北'){"; foreach($result as $row3){ echo "select2.options[] = new Option(" . $row3['shoplist'] . ");"; } echo "}\n"; echo "else if (select1.options[select1.selectedIndex].value == 'ネ'){"; foreach($result as $row3){ echo "select2.options[] = new Option(" . $row3['shoplist'] . ");"; } echo "}\n"; echo "</script>\n"; echo "<form name=formName method=post action=./pathToProgramFile>\n"; echo "<tr>\n"; echo "<td>エリア</td>\n"; echo "<td>\n"; echo "<select name=area onChange=functionName()>\n"; echo "<option name=1 value=東>東エリア</option>\n"; echo "<option name=2 value=西>西エリア</option>\n"; echo "<option name=3 value=南>南エリア</option>\n"; echo "<option name=4 value=北>北エリア</option>\n"; echo "<option name=5 value=ネ>ネットルーム</option>\n"; echo "</select>\n"; echo "</td>\n"; echo "</tr>\n"; echo "<tr>\n"; echo "<td>希望店舗</td>\n"; echo "<td>\n"; echo "<select name=selectName2></select>\n"; echo "</td>\n"; echo "</tr>\n"; echo "</form>\n";

※3/30 コード修正/追記分
上記コードで実行しまして、もともと参考にしたサイトのコードと比べてみるとselect2.option[]の中身に問題があるように思います。
イメージとしてはDBに登録されている「東西南北ネ」の値を持っているデータのそれぞれの数を数えて、$i++などで順番に表示というコードを書ければいいのではないかと思っています。
よろしくお願い申し上げます。

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

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

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

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

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

rkojima

2016/03/29 09:36

$shoplist と $result['shoplist']はそれぞれどんな値が入っていますか? var_dump($shoplist); var_dump($result); の結果がそれぞれ知りたいです。
退会済みユーザー

退会済みユーザー

2016/03/29 09:51

ご質問有難う御座います。 $shoplistと$result['$shoplist']は同じになります。 中には配列として支店名が入っています。
ao_love

2016/03/29 10:59

同じような内容でされた質問が締め切られていないようですので、まずはそちらのベストアンサーを決定して解決済みにされた方がいいかと思います。 あと、コードの記法をみてコードを読みやすくするのがお勧めです。
退会済みユーザー

退会済みユーザー

2016/03/29 12:09

やってみます。
guest

回答3

0

ベストアンサー

こんにちは。

あまりPHPはよく分かりませんが、
おそらく、Javascriptの部分の==で比較している固定値が変数として扱われてしまっているため、
全てのif文の条件に合致せず空っぽのままになってしまうのだと思います。

javascriptでは文字列を"または'で囲む必要がありますので

if (select1.options[select1.selectedIndex].value == 東){

ここは
if (select1.options[select1.selectedIndex].value == '東'){

とするといいと思います。
前者だと、東が変数扱いされてしまうので、
中身のないものと選択中のオプションの中身を比較してしまっています。

あと、書き方についてですが、ryls-nmmさんもおっしゃっていますように、
全部 echo はやめたほうがいいと思います。
PHPだからといって、全てのソースをPHPで書く必要はないので、
HTMLやjavascriptの中に<?php ~ ?>で区切ってPHPを組み込んでいくといいと思います。

投稿2016/03/30 02:24

編集2016/03/30 02:30
kaputaros

総合スコア1844

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

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

退会済みユーザー

退会済みユーザー

2016/03/30 04:25

ご回答有難う御座います。 シングルクォーテーションで囲むことによって echo "if (select1.options[select1.selectedIndex].value == 東){"; foreach($result as $row3){ echo "select2.options[$i] = new Option(" . $row3['shoplist'][0] . ");"; } echo "}\n"; この部分の結果で店舗一覧が取って来れました。 ありがとうございます。 ただ依然としてselectName2のドロップダウンリストには何も表示されていませんので、間違いがありましたらご指摘よろしくお願い致します。
kaputaros

2016/03/30 06:45 編集

ソースが少し変わっているようなのですが、 > select2.options[] = new Option(~); これは出来ないと思います。 select2.options[]とすると配列になりますが、Optionは単一です。 きちんと機能しないと思います。 先ほどのように $i を使って、 ・ループの外で $i を 0 で初期化 ・[]内で $i++ すればいいんじゃないでしょうか? ちなみに、new Option() の引数に渡している「$row3['shoplist'] 」ですが、 $row3に入ってくるデータはどのような構造を想定しているのでしょうか? (SQL結果の1レコード分のデータですよね??) そこがきちんと指定できていないから値がとれないのではないかな?と思います。
guest

0

色々と問題点がありますね
まずミスに気づきにくくなるので全部 echo はやめたほうがいいと思います
PHP は <?php からはじめなければ書いたまま出力されるので、PHPの処理のところだけ <?php ?> で囲みます

php

1<script> 2function functionName(){ 3 var select1 = document.forms.formName.area; 4 var select2 = document.forms.formName.selectName2; 5 select2.options.length=0; 6 if (select1.options[select1.selectedIndex].value == "東"){ 7 <?php foreach($result as $row3){ ?> 8 select2.options[<?php echo $i; ?>] = new Option("<?php echo $row3['shoplist'][0]; ?>"); 9 <?php } ?> 10 } 11 else if (select1.options[select1.selectedIndex].value == "西"){ 12 <?php foreach($result as $row3){ ?> 13 select2.options[<?php echo $i; ?>] = new Option("<?php echo $row3['shoplist'][0]; ?>"); 14 <?php } ?> 15 } 16 else if (select1.options[select1.selectedIndex].value == "南"){ 17 <?php foreach($result as $row3){ ?> 18 select2.options[<?php echo $i; ?>] = new Option("<?php echo $row3['shoplist'][0]; ?>"); 19 <?php } ?> 20 } 21 else if (select1.options[select1.selectedIndex].value == "北"){ 22 <?php foreach($result as $row3){ ?> 23 select2.options[<?php echo $i; ?>] = new Option("<?php echo $row3['shoplist'][0]; ?>"); 24 <?php } ?> 25 } 26 else if (select1.options[select1.selectedIndex].value == "ネ"){ 27 <?php foreach($result as $row3){ ?> 28 select2.options[<?php echo $i; ?>] = new Option("<?php echo $row3['shoplist'][0]; ?>"); 29 <?php } ?> 30 } 31} 32</script> 33<form name=formName method=post action=./pathToProgramFile> 34<tr> 35 <td>エリア</td> 36 <td> 37 <select name=area onChange=functionName()> 38 <option name=1 value=></option> 39 <option name=2 value=西>西</option> 40 <option name=3 value=></option> 41 <option name=4 value=></option> 42 <option name=5 value=></option> 43 </select> 44 </td> 45</tr> 46<tr> 47 <td>店舗</td> 48 <td> 49 <select name=selectName2></select> 50 </td> 51</tr> 52</form>

この時点でエラーを防ぐためにいくつか修正していますが、

  • functionName のおわりの } がないです
  • Option の中などの文字列が出るところは " がないと、JavaScript実行時に value == 東 となってしまいエラーになります

動きはしてもこれだと思い通りには動かないと思います

  • $i がインクリメントされていないのでずっと一緒です
  • $row3['shoplist'][0] が東でも西でも一緒になります

とりあえず質問はセレクトボックスに表示されないということだったのでここまでにしておきます

php

1$i = 0; 2$result = [ 3 ["shoplist" => ["a"]] 4];

こういう初期値だと一応JavaScriptでセレクトボックスに値が入ります

あと、動きますが trtable の中に入れておいたほうがいいです

投稿2016/03/29 13:01

ryls-nmm

総合スコア633

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

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

退会済みユーザー

退会済みユーザー

2016/03/30 01:28

ご回答有難う御座います。 上記コードは一部のみ書いており、PHP内での出力だったので全てechoで表示しておりました 自分でもechoばっかりだなと思うときがあるので、何かいい解決策があれば教えて頂きたいです。 本題ですが、根本的に組み方が間違っているんでしょうね。。 コードを書き変えてみましたが値は入りませんでした。 Javascriptに関しては無知識なので、調べながらもう一度見直してみます。
ryls-nmm

2016/03/30 13:44

<?php の内側にしかかけなくても、 「?>」で閉じればいいですよ <?php …… ?> の外側の文字は echo 書いたのと一緒でそのまま出力されます ブラウザで Ctrl-U を押すなどしてソースを見れば PHP で作られた JavaScript のコードが見えるので、そこで JavaScript としておかしくないか確認すれば良いと思います また、エラーがあると、ブラウザの devtools ( F12 キーを押す )でエラーが表示されるのでそこを直していくと良いと思います
guest

0

$result['shoplist']は配列とのことで、こんな感じと想定しての話になります。

$result['shoplist'] = array('A', 'B', 'C');

この場合、以下のように文字列連結に配列を渡していることになるため予期しない結果となります。

echo "[省略] = new Option(" . array('A', 'B', 'C') . ");"; //[出力結果] [省略] = new Option(Array);

$result['shoplist'][0]なり$result['shoplist'][$counts-1]なり引数を指定する必要があります。

投稿2016/03/29 10:06

rkojima

総合スコア421

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

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

退会済みユーザー

退会済みユーザー

2016/03/29 12:25

ご回答有難う御座います。 自分で進めてみたものにrkojimaさんにご回答頂いた解決方法を試してみましたがダメでした。。。 質問したコードを修正しましたので、可能であればご覧ください。
rkojima

2016/03/29 23:56

↓本当にこの形式でデータが入っていますか? $result['shoplist'] = array('A', 'B', 'C'); 例えば↓の用に、データ形式が違うなら当然表示されませんよ。 $result['shoplist'] = array( array('name'=>'A'), array('name'=>'B'), array('name'=>'C') ); そこを判断するために、情報修正以来で `var_dump($result);`の値も出してくださいとお願いしています。 現在公開されている情報では誰も正解はわからないと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問