【问题标题】:PHP Mysql Ajax - dynamic dropdown did not workingPHP Mysql Ajax - 动态下拉菜单不起作用
【发布时间】:2019-02-25 10:15:32
【问题描述】:

我尝试制作一个动态下拉菜单,当在医生下拉菜单中选择任何多边形选项时,总是会出现同一个医生。

这是动态下拉的代码

<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;

【问题讨论】:

  • @mickmackusa 我从另一个代码中复制了查询并忘记删除 die()
  • 是的,我有一个 id_poly 的医生

标签: php mysql ajax dynamic dropdown


【解决方案1】:

不要尝试检查您提交的值并将其注入到同一步骤中的查询中。

isset() 是在构建查询之前执行的合理检查以避免Notice,但它只会提供truefalse。这会破坏您的预期查询。 See what happens.

发回 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") disabled。

【讨论】:

  • 更详细地说明为什么它不适合您。您在客户端和服务器端日志中看到了哪些错误?
  • 记住,我看不到你的屏幕。我不知道你的数据库表中有什么。我不知道您提交的 $_POST 值是什么。我没有看到错误。我不知道你的连接是否在线。
  • 没有错误,只有第二个下拉菜单没有显示任何内容
  • 发送原始 html 并不是执行此过程的最干净的方法。在 StackOverflow 上,您将找到数十个示例,说明如何通过从 php 脚本传回 json 对象并运行 javascript 循环以生成新的选项列表来执行 &lt;option&gt; 替换任务。
  • @tifa 好的,我已经扩展(但未测试)我的建议。请试试这个代码。如果它不起作用,请表达在您的服务器端错误日志和您的客户端控制台.log 中显示的错误。
猜你喜欢
  • 2012-01-20
  • 2017-08-02
  • 2014-12-04
  • 2013-07-20
  • 2012-01-12
  • 1970-01-01
  • 2019-07-10
  • 2017-03-09
相关资源
最近更新 更多