PHP Mysql Ajax - динамический выпадающий не работает - PullRequest
0 голосов
/ 21 сентября 2018

Я пытался создать динамическое раскрывающееся меню, при выборе любого параметра поли в раскрывающемся списке доктора всегда отображается один и тот же доктор.

Это код для динамического раскрывающегося списка

<div class="form-group">
            <label>Poly : </label>
            <select name="poly" id="poly" class="form-control" style="width: 50%">
                <option disabled selected>--Choose Poly--</option>
                <?php
                $sqql = mysqli_query($kon,"SELECT * FROM poly") or die(mysqli_error($kon));
                while ($rorow = mysqli_fetch_array($sqql)) {
                    ?>
                    <option value="<?php $rorow['id_poly'];?>"><?php echo $rorow['poly']; ?></option>
                    <?php
                }
                ?>
            </select>
        </div>
        <div class="form-group">
            <label>Doctor : </label>
            <select name="doctor" id="doctor" class="form-control" style="width: 50%">
                <option disabled selected>--Choose doctor--</option>
            </select>
        </div>

это код для ajax

<script   src="https://code.jquery.com/jquery-3.1.1.js"   integrity="sha256-16cdPddA6VdVInumRGo6IbivbERE8p7CQR3HzTBuELA="   crossorigin="anonymous">  </script>
<script type="text/javascript">
    $(document).ready(function(){
        $("#poly").change(function(){
            var id_poly = $(this).val();
            $.ajax({
                url:"getdoctor.php",
                method:"POST",
                data: {id_poly:id_poly},
                success:function(data)
                {
                    $("#doctor").html(data);
                }
            });
        });
    });
</script>

этот код для getdoctor.php

    $ouput ='';
$dok = mysqli_query($kon,"SELECT * FROM doctor WHERE id_poly = '".isset($_POST["id_poly"])."'") or die(mysqli_error($kon));

$output .= '<option value="" disabled selected>--Choose doctor--</option>';
if (mysqli_num_rows($dok)>0){
    while ($row = mysqli_fetch_array($dok)) {
        $output .= '<option value="'.$row["id_doctor"].'">'.$row["doctor"].'</option>';

    }
}
echo $output;

1 Ответ

0 голосов
/ 21 сентября 2018

Не пытайтесь проверять отправленное значение и вставлять его в запрос на том же шаге.

isset() - разумная проверка перед выполнением запроса, чтобы избежать Notice, ноон доставит только true или false.Это запутывает ваш предполагаемый запрос. Посмотрите, что произойдет.

Отправка html не так чиста, как обработка объекта json в цикле для генерации нового html.

Вот мой непроверенный предлагаемый код:

PHP:

// connect with $kon
$result[] = ["", "--Choose doctor--"];
if (isset($_POST["id_poly"])) {
    if ($dok = mysqli_query($kon, "SELECT id_doctor, doctor FROM doctor WHERE id_poly = " . (int)$_POST["id_poly"]))
        while ($row = mysqli_fetch_assoc($dok)) {
            $result[] = [$row["id_doctor"], $row["doctor"]];
        }
    }
}
echo json_encode($result);

Затем вернитесь в свою success функцию:

var doctor = $("#doctor");
doctor.empty();
for (var i = 0; i < data.length; ++i) {
    doctor.append('<option value="' + data[i][0] + '"' + (i ? "" : " disabled") + '>' + data[i][1] + '</option>');
}

(i ? "" : " disabled") <- это проверка с нулем / ненулем, так что только первый вариант <code>disabled.

...