繁体   English   中英

根据另一个选择填充一个下拉列表

[英]Populating a dropdown list based on the selection from another

我正在尝试填充一个下拉列表,其中包含根据用户选择的国家/地区的城市名称。 这是该国的下拉列表:

<select name = "country" onChange = "loadcities(this.value)">
        <?php
            include 'dbconnect.php';
            $query = "SELECT * FROM Country";
            $result = $mysqli->query($query);
            while($row = $result->fetch_array()){
                echo "<option value = '$row[0]'> $row[2] </option>";
            }
        ?>
    </select>

我正在使用此javascript函数进行填充:

function loadcities(selected){
var s = document.getElementById("city");
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function(){
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
            var citynames = (xmlhttp.response).slice();
            for(var i = 0; i < citynames.length(); i++){
                var option = document.createElement(i.toString());
                option.text = citynames[i];
                s.add(option);
            }
        }
    }
    xmlhttp.open("GET", "loadcities.php?q=" + str, true);
    xmlhttp.send();

}

这是在先前功能内使用的php文件:

<?php
$q = $_REQUEST["q"];
include "dbconnect.php";
$citynames = []; 
$result = $mysqli->query("SELECT cityname from CITY WHERE City.countryid = '$q'");
while($row = $result->fetch_array()){
    $cityname[] = $row[2];
}
echo "$citynames";
?>

我意识到可能有很多错误,但我不知道如何解决。 任何帮助,将不胜感激。

首先,在第三个代码段中,您同时具有$ cityname和$ citynames。 我认为它们应该相同。 另外,您正在从数据库中获取一列,然后使用THIRD列($ row [ 2 ])。 可能应该是$ row [0]。

最后,您将回显一个数组...,该数组将仅输出array而不是数组的内容。 同样在第二部分中,在javascript代码中,您正在使用slice(),它用于将一组值从一个数组获取到一个新数组中。

我相信您应该将您的第三个代码片段更改为:

<?php
$q = $_REQUEST["q"];
include "dbconnect.php";
$result = $mysqli->query("SELECT cityname from CITY WHERE City.countryid = $q");
while($row = $result->fetch_array())
{
    echo $row[0].'@@@@';
}
?>

然后,您应该在javascript中更改以下行:

var citynames = (xmlhttp.response).slice();

var citynames = (xmlhttp.response).split('@@@@');

附带说明一下,您的PHP脚本具有一个巨大的安全漏洞:您将$ _REQUEST输入直接传递到数据库。 您应该先对其进行消毒,否则就有被黑客入侵的风险。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM