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

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

ただいまの
回答率

90.50%

  • PHP

    20775questions

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

  • JavaScript

    16948questions

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

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

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,070
退会済みユーザー

退会済みユーザー

セレクトボックス①を変更するとセレクトボックス②が変更されるというパーツを作っています。
セレクトボックス②には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++などで順番に表示というコードを書ければいいのではないかと思っています。
よろしくお願い申し上げます。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • rkojima

    2016/03/29 18:36

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

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2016/03/29 18:51

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

    キャンセル

  • ao_love

    2016/03/29 19:59

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

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2016/03/29 21:09

    やってみます。

    キャンセル

回答 3

checkベストアンサー

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 13:25

    ご回答有難う御座います。
    シングルクォーテーションで囲むことによって

    echo "if (select1.options[select1.selectedIndex].value == 東){";
    foreach($result as $row3){
    echo "select2.options[$i] = new Option(" . $row3['shoplist'][0] . ");";
    }
    echo "}\n";

    この部分の結果で店舗一覧が取って来れました。
    ありがとうございます。

    ただ依然としてselectName2のドロップダウンリストには何も表示されていませんので、間違いがありましたらご指摘よろしくお願い致します。

    キャンセル

  • 2016/03/30 15:12 編集

    ソースが少し変わっているようなのですが、
    > select2.options[] = new Option(~);
    これは出来ないと思います。
    select2.options[]とすると配列になりますが、Optionは単一です。
    きちんと機能しないと思います。

    先ほどのように $i を使って、
    ・ループの外で $i を 0 で初期化
    ・[]内で $i++
    すればいいんじゃないでしょうか?

    ちなみに、new Option() の引数に渡している「$row3['shoplist'] 」ですが、
    $row3に入ってくるデータはどのような構造を想定しているのでしょうか?
    (SQL結果の1レコード分のデータですよね??)
    そこがきちんと指定できていないから値がとれないのではないかな?と思います。

    キャンセル

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 21:25

    ご回答有難う御座います。
    自分で進めてみたものにrkojimaさんにご回答頂いた解決方法を試してみましたがダメでした。。。

    質問したコードを修正しましたので、可能であればご覧ください。

    キャンセル

  • 2016/03/30 08:56

    ↓本当にこの形式でデータが入っていますか?
    $result['shoplist'] = array('A', 'B', 'C');

    例えば↓の用に、データ形式が違うなら当然表示されませんよ。
    $result['shoplist'] = array( array('name'=>'A'), array('name'=>'B'), array('name'=>'C') );

    そこを判断するために、情報修正以来で `var_dump($result);`の値も出してくださいとお願いしています。
    現在公開されている情報では誰も正解はわからないと思います。

    キャンセル

0

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

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

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

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

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

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

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

$i = 0;
$result = [
    ["shoplist" => ["a"]]
];


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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/30 10:28

    ご回答有難う御座います。

    上記コードは一部のみ書いており、PHP内での出力だったので全てechoで表示しておりました
    自分でもechoばっかりだなと思うときがあるので、何かいい解決策があれば教えて頂きたいです。

    本題ですが、根本的に組み方が間違っているんでしょうね。。
    コードを書き変えてみましたが値は入りませんでした。
    Javascriptに関しては無知識なので、調べながらもう一度見直してみます。

    キャンセル

  • 2016/03/30 22:44

    <?php の内側にしかかけなくても、 「?>」で閉じればいいですよ
    <?php …… ?> の外側の文字は echo 書いたのと一緒でそのまま出力されます

    ブラウザで Ctrl-U を押すなどしてソースを見れば PHP で作られた JavaScript のコードが見えるので、そこで JavaScript としておかしくないか確認すれば良いと思います

    また、エラーがあると、ブラウザの devtools ( F12 キーを押す )でエラーが表示されるのでそこを直していくと良いと思います

    キャンセル

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

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    20775questions

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

  • JavaScript

    16948questions

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