【问题标题】:How to populate select dropdown based on first select dropdown如何根据第一个选择下拉列表填充选择下拉列表
【发布时间】:2018-08-03 14:55:04
【问题描述】:

我已经阅读了很多关于此的不同文章,包括 https://www.9lessons.info/2010/08/dynamic-dependent-select-box-using.htmlhttp://blog.chapagain.com.np/using-jquery-ajax-populate-selection-list/

但这对我不起作用,我不知道为什么。

HTML

div class="col-sm-6">
                        <label for="selectComplvl" class="regions" >Region</label></div>
                    <div class="col-sm-6">
                      <select class="form-control levelbox" id="region" value="" name="region">
                        <option value="base">---Select---</option>
                        <?php
                          $region_sql = "SELECT * FROM `regions`";
                          $region_res = mysqli_query($con, $region_sql);
                          if(mysqli_num_rows($region_res) > 0){
                             while($region_row = mysqli_fetch_array($region_res)){
                                  echo "<option value='".$region_row[id]."'>".$region_row[region]."</option>";
                              } 
                          }

                        ?>

                      </select>
                      <div class="help-block with-errors"></div>
                    </div>
                  </div>
                </div>

                <div class="form-group col-sm-3">
                  <div class="row">
                    <div class="col-sm-6">
                        <label for="compEntered" class="comp">compeition Entered</label></div>
                    <div class="col-sm-6">
                      <select class="form-control" id="compEntered" name="compEntered">
                        <option value="base">Please choose a Region</option>

                      </select>
                      <div class="help-block with-errors"></div>
                    </div>
                  </div>
                </div>
            </div>

getcomp.php

<?php
if($_POST['id'])
{
$id=$_POST['id'];
$sql=mysqli_query("select * from comp_entered where region_id='$id'");
while($row=mysqli_fetch_array($sql))
{
    echo '<option value="'.$row['region_id'].'">'.$row['comp_entered'].'</option>';
}
}
?>

JS

$(document).ready(function(){ 
$("#region").change(function()

                                             {
                            var id=$(this).val();
                            var dataString = 'id='+ id;
                            $.ajax
                            ({
                                type: "POST",
                                url: "getcomp.php",
                                data: dataString,
                                cache: false,
                                success: function(html)
                                {
                                    $("#compEntered").html(html);
                                }
                            });
                        });
});

表格区域

| 身份证 | 地区 |

| 1 |中美洲 |

| 2 |大西洋中部 |

| 3 |美国南部 |

TABLE comp_entered

| 身份证 | region_id | comp_entered |

| 1 | 1 |补偿 |

| 2 | 1 |补偿 |

| 3 | 2 |比较 C |

| 4 | 2 |压缩 |

| 5 | 3 |比较|

| 6 | 3 |比较 F |

我的代码有什么问题?完成这项工作的最佳方法是什么?

【问题讨论】:

  • 在 getcomp.php 中立即回显,只有第一个元素会返回给 AJAX 调用。组装html元素的字符串,然后在while循环外返回变量
  • 不要只说“它不工作”。 以什么方式它不起作用?预期/期望的结果是什么?实际/不希望的结果是什么?您是否收到任何错误(检查您的 JS 控制台以及服务器日志)?如果是这样,确切的错误是什么?你得到的输出与你期望的不匹配吗?你已经做了哪些调试?
  • 你有php错误日志吗?派上用场
  • 首先从&lt;select class="form-control levelbox" id="region" value="" name="region"&gt; 中删除value="" 您的代码也容易受到sql 注入攻击。尝试使用准备好的语句
  • @quirimmo 这是一个错误的陈述。如果直接请求,PHP 会像通常那样生成 html。当 PHP 脚本结束时,Ajax 将使用 PHP 的完整输出。因此,在循环内部循环和回显对于 ajax 调用来说是完全有效的 html 生成。

标签: javascript php jquery html mysqli


【解决方案1】:

我发现了我的问题!感谢 Jordan 指出我应该检查我的错误日志!!问题出在我的 getcomp.php 文件中。

我在这里发布答案,以防其他人遇到类似问题。

这是正确的代码:

if($_POST['id'])
{
$id=$_POST['id'];
$sql= "select * from comp_entered where region_id='$id'";
$res= mysqli_query($con, $sql);
while($row=mysqli_fetch_array($res))
{
    echo '<option value="'.$row['region_id'].'">'.$row['comp_entered'].'</option>';
}
}
?> 

再次感谢乔丹

【讨论】:

  • 干杯!很高兴你能找到你的答案。为了更好的安全性,我还会查看准备好的语句:)
  • 是的,你是对的。我在 mysqli 上构建了整个站点,我不期待学习和切换到 PDO。有没有办法防止mysqli注入sql?
  • 我不太确定。我将所有mysqli 语句切换为面向对象。例如:$run = $con-&gt;prepare($sql); 然后$run-&gt;bind_param("i",$var); 然后$run-&gt;execute(); 我发现这比程序更容易理解。就个人而言,我没有使用过 PDO,所以我无法谈论它,但我确信这两种方法都可以很好地完成工作
  • 谢谢!我会尝试面向对象的
猜你喜欢
  • 2017-12-17
  • 2012-01-04
  • 2014-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多