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

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

ただいまの
回答率

90.12%

DBのコンボボックスで選択されたレコードの内容を取得して、その内容をラジオボタンに反映する

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,019

sin-zo

score 10

以前の質問

https://teratail.com/questions/110444

にて、DBを使ってコンボボックスをつくり、コンボボックスを選択した際に、レコードにある別のカラムをテキスト表示する処理において、今度は、別のカラムに「0:OFF」と「1:ON」で登録されている複数カラム内容を取得して、そのカラム毎にラジオボタンを「0:OFF」の場合「非アクティブ」、「1:ON」の場合「アクティブ」として表示させようと考えております。

コンボボックスからはJavaにて「値:value」を取得して、その値を使ってjavascriptの処理の中でphpで命令してmysqlの必要なテーブルからレコードを読み込む込み、その中よりラジオボタンに対応したカラムの状態を条件判断して、ラジオボタンを「disabled」すればいいのだとはわかっているのですが、上手くコードを書くことが出来ません。

そもそも、この考えも間違っているのかもしれません。

そのあたりも踏まえて、考え方や処理の方法やコードなどを、ご教授頂けないかと思います。

宜しくお願い致します。

【HTML】
    <div class="form-group" style="height: 25px">
        <label for="shelf_name" class="control-label col-sm-1" style="padding-left: 0">保管場所</label>
        <?php
            $link = mysqli_connect('localhost', 'root', '', 'db_keisoku' ); //MySQLのDBへ接続
            if (!$link) {
                echo "データベースに接続できませんした" . PHP_EOL;
            }
//            echo "データベースに接続と選択ができました" . PHP_EOL;
            $query = "SELECT * FROM shfnum_tbl";
            $result = mysqli_query($link, $query);
            if (!$result) {
                print ("データ取得失敗<br>");
                exit();
            }

>>>此処で、コンボボックスでDBのレコードの棚番号カラムを選択する

            echo '<div class="col-sm-4">';
           echo '<select name="shelfnum" class="form-control" onchange="outputSelectedValueAndText(this);">';
            echo '<option value="" selected="selected">棚番号を選択してください</option>';
            while ($value = mysqli_fetch_array($result, MYSQL_ASSOC)) {
                echo "<option value=\"" . $value["shelf_name"] . "\">" . $value["shelf_num"] . "</option>";
            }
            echo '</select>';
            echo '</div>';
            // 棚のある場所を表示
            echo '<div class="col-sm-5">';
            echo '<input type="text" class="form-control" name="shelfName" readonly>';
            echo '</div>';
            mysqli_close($link);
        ?>
    </div>

【javascript】
>>>棚番号カラムから、DBよりそのカラムと同じレコードの棚段数カラム(1~8)の設定「0:OFF/ 1:ON」により、ラジオボタンをアクティブもしく非アクティブとしたい
    function outputSelectedValueAndText(obj)
    {
        var value = obj.options[idx].value; // 値
         <?php
            $j_link = mysqli_connect('localhost', 'root', '', 'db_keisoku' ); //MySQLのDBへ接続
            if (!$j_link) {
                echo "データベースに接続できませんした" . PHP_EOL;
            }
            //            echo "データベースに接続と選択ができました" . PHP_EOL;
            $j_query = "SELECT * FROM shfnum_tbl WHERE shelf_num = $value";
            $j_result = mysqli_query($j_link, $j_query);
            if (!$j_result) {
                print ("データ取得失敗<br>");
                exit();
            }
            $j_row = mysqli_fetch_array($j_result);
            if ($j_row["shelf_step_1"]) {
                echo'<input type="radio" name="shelf_num" value="1"><a style="margin-left: 5px">1段目</a>';
            } else {
                echo'<input type="radio" name="shelf_num" value="1" disabled><a style="margin-left: 5px">1段目</a>';
            }


       ?>

2018/2/26追加

イメージ画像です
イメージ説明

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • sin-zo

    2018/02/26 17:11

    PHPでデータベースにアクセスしてから、イメージのテーブルを読む込むようにしています。

    キャンセル

  • x_x

    2018/02/26 17:24

    いずれにせよサーバー側はそうなります。クライアントにはどう渡すつもりでしょうか?

    キャンセル

  • sin-zo

    2018/02/26 17:32

    そのあたりの処理があまり理解していません。javascriptでするのだろうというような程度です。そのあたりは、正直あまり理解していないため、どのような事をすればよいのかがわからずに、ここで質問させて頂いております。

    キャンセル

回答 1

checkベストアンサー

+2

コメントでも書きましたが、念のため再掲します。

”””””””””””
javascriptはあくまでクライアント側の言語でPHPはサーバー側の言語なので、
今回のように幾らjavascript側でvalueというのを準備してもphp側で$valueという変数では使えません。
プログラム上は上から順に見えますが、PHPを実行した結果がjavascriptを含んだhtml上に出るだけなので、
想定のようには動きません。
”””””””””””

また、全面的な解決方法ではありませんが、

棚番号カラムから、DBよりそのカラムと同じレコードの棚段数カラム~~

の部分の対応方針です。

ajaxを利用します。

function outputSelectedValueAndText(obj)
{
    //セレクトボックスから情報を取得
    var value = obj.options[idx].value; // 値
    var arg = {shelfnum:value };

    //ajaxにてPHPに選択した情報をPOST
    $.ajax({
        url: "hogehoge.php",
        data: arg,
        type: "POST",
        dataType:'json',
    }).done(function(data, status, xhr) {
        //通信および情報取得が成功した場合
        if(status === "success" && data.result == "1"){
            console.log(data.data_row);
       //あとは任意の場所にhtmlを出力するようにjavascriptで書いていけばいいはず
            if(data.data_row.shelf_step_1){ //shelf_step_1がtrueの場合?
            //////省略
            }else{
            //////省略
            }
            if(data.data_row.shelf_step_2){ //shelf_step_1がtrueの場合?
            //////省略
            }else{
            //////省略
            }
            ////////////省略
        }else{
            console.log(xhr);
            alert("データ取得失敗");
        }
    }).fail(function(xhr, status, error) {
        console.log(xhr);
        alert("データ取得失敗");
    });

}


hogehoge.php

$res["result"] = "9";
if($_SERVER["REQUEST_METHOD"] !== "POST"){
  echo json_encode($res);
  exit();
}
if(!isset($_POST["shelfnum"])){
  echo json_encode($res);
  exit();
}

$j_link = mysqli_connect('localhost', 'root', '', 'db_keisoku' ); //MySQLのDBへ接続
if (!$j_link) {
  echo json_encode($res);
  exit();
}

$j_query = "SELECT * FROM shfnum_tbl WHERE shelf_num = ".mysqli_real_escape_string($_POST["shelfnum"]);
$j_result = mysqli_query($j_link, $j_query);
if (!$j_result) {
  echo json_encode($res);
  exit();
}
$j_row = mysqli_fetch_array($j_result);
$res["result"] = "1";
$res["data_row"] = $j_row;

echo json_encode($res);
exit();

イメージですが、これでひとまず選択した情報を元にPHPからデータを取得してjavascriptで扱うところまではいけたかと思います。
あとはjavascriptにてhtmlに任意の情報(ラジオボタンとか?)を埋め込む処理を書いていく感じになるのではないかと。

正常に取得できたかどうかは、下記の記述を通れば開発ツールから参照可能なはず。

console.log(data.data_row);

※ちなみにjQueryが必要です

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/03/02 18:10

    返答が遅くなり申し訳ありません。確認させて頂き、思う通りの動作ができました。ありがとうございました。Ajaxを使用して、javascriptとPHPでデータベースからデータを取得する方法が、よく理解できました。

    本当に、ありがとうございました。

    キャンセル

  • 2018/03/03 06:24

    解決できたようで何よりです。

    キャンセル

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

  • ただいまの回答率 90.12%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる
  • トップ
  • PHPに関する質問
  • DBのコンボボックスで選択されたレコードの内容を取得して、その内容をラジオボタンに反映する