Javascript 根据从另一个列表中选择的内容填充下拉列表
我试图填充一个下拉列表,其中包含基于用户选择的国家的城市名称。 这是该国的下拉列表:Javascript 根据从另一个列表中选择的内容填充下拉列表,javascript,php,Javascript,Php,我试图填充一个下拉列表,其中包含基于用户选择的国家的城市名称。 这是该国的下拉列表: <select name = "country" onChange = "loadcities(this.value)"> <?php include 'dbconnect.php'; $query = "SELECT * FROM Country"; $result = $mysqli->query
<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>
首先,在第三个代码段中,您有$cityname和$citynames。我认为它们应该是一样的。另外,您正在从数据库中提取一列,然后使用第三列($row[2)。这可能应该是$row[0]
最后你是在回显一个数组。。。这将只输出数组
,而不是数组的内容。同样在第二部分中,在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].'@@@@';
}
?>
到
另一方面,您的PHP脚本有一个巨大的安全漏洞:您将$\u请求输入直接传递到数据库。在执行此操作之前,您应该对其进行清理,否则您将面临被黑客攻击的风险。(1)如果您的$q
是字符串,则需要引用查询中的字符串-。。。其中City.countryid='$q'
。(2) 您应该清理您的数据,因为您正在使用mysqli
使用准备好的statement@Sean即使用户只是从下拉列表中选择,而没有手动输入任何内容,我也需要进行清理。在php中,您不能只回显数组echo“$citynames”代码>。你可以试试回声内爆($citynames)
。另外,在var citynames=(xmlhttp.response.slice())中使用slice()
可能应该是split()
,由于phpinfrade()
返回一个逗号分隔的字符串,您可以执行var citynames=(xmlhttp.response).split(',')代码>是,始终进行消毒。现在,您可以通过转到loadcities.php?q=injected\u code
Im获取一行并使用该行中的第三列来直接注入。这就是我写$row[2]的原因。我知道安全问题,但这是一个很小的大学项目,期限很短,老师告诉我们现在不要考虑安全问题。不,你不会吵架的。您可以从行中选择一列。要获取行,您需要从中选择*from代码>您是否尝试了更改?它们对你有用吗?我完全重写了代码并修复了所有错误。
<?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";
?>
<?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].'@@@@';
}
?>
var citynames = (xmlhttp.response).slice();
var citynames = (xmlhttp.response).split('@@@@');