我想创建一个动态下拉列表,其中第二个下拉列表的选项在选择第一个下拉列表后会发生变化。
test.php文件
<?php
$con=mysqli_connect("localhost","******","****","******");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($con,"SELECT * FROM countries");
?>
<select id="country" name='country' onchange="get_states();">
<option value=''>Select</option>
<?php
while($row = mysqli_fetch_array($result))
{
echo "<option value='" . $row['country_id'] . "'>" . $row['country_name'] . "</option>";
}
?>
</select>
<div id="get_state"></div> // Sub will be appended here using ajax
<script type="text/javascript">
function get_states() { // Call to ajax function
var country = $('#country').val();
var dataString = "country="+country;
$.ajax({
type: "POST",
url: "getstates.php", // Name of the php files
data: dataString,
success: function(html)
{
$("#get_state").html(html);
}
});
}
</script>
<?php
mysqli_close($con);
?>
并且gestates.php是:
<?php if ($_POST) {
$country = $_POST['country'];
if ($country != '') {
$sql1 = "SELECT * FROM states WHERE country_id=" . $country;
$result1 = mysql_query($sql1);
echo "<select name='state'>";
echo "<option value=''>Select</option>";
while ($row = mysql_fetch_array($result1)) {
echo "<option value='" . $row['id'] . "'>" . $row['state_name'] . "</option>";}
echo "</select>";
}
else
{
echo '';
}
}
?>
但是上面的代码不起作用!
答案 0 :(得分:0)
在第一次下拉列表中更改时,您需要进行ajax调用以获取选项,然后您可以填充下一个下拉列表
答案 1 :(得分:0)
尝试在$ country
附近添加单引号$ sql1 =“SELECT * FROM states WHERE country_id ='”。 $ country。 “'”;
或
$ sql1 =“SELECT * FROM states WHERE country_id ='$ country'”;
编辑:此外,您只能回显一个结果。第二个回声将被Jquery忽略,因为第一个将被视为成功。
您应该以不同方式格式化结果。
也许是json编码的数组。
在你的php中:
while($row = mysql_fetch_array($result1))
{
$data[$row['id']] = $row['state_name'];
}
echo json_encode($data);
在你的Jquery中设置dataType:'json'
$.each(html,function(key,value){
$("#get_state").append($('<option>',{
value:key,
text: value
}));
});