我已经通过从mysql数据库获取两个下拉列表的记录来构建两个下拉(如州和城市),并且我正在尝试构建工具,在该工具中,从第一个下拉列表中选择任何值(即任何状态),在第二次下拉(在城市中)时,只有在第一次下拉中选择的那个值(州)下的那些值(城市)应该是可见的。
这是我的代码:
<tr>
<td id='hed'><span style="font-family:verdana,geneva,sans- serif">State</state></td>
<td>
<?php
$dbcon = mysql_connect("@ip","@username","@password");
if($dbcon)
{
mysql_select_db("@database", $dbcon);
}
else
{
die('error connecting to the database');
}
$qry = "select @value(state) from @tablename ";
$result = mysql_query($qry) or die(mysql_error());
$dropdown = "<select name='@valuename' id='officeItemList' style='cursor:pointer;cursor:hand;'>";
while($row = mysql_fetch_array($result))
{
$dropdown .= "\r\n<option value='{$row['@value']}' > {$row['@value']} </option>";
}
$dropdown .= "\r\n</select>";
echo $dropdown;
mysql_close($dbcon);
?>
</td>
</tr>
<tr>
<td id='hed'><span style="font-family:verdana,geneva,sans-serif">City</span></td>
<td colspan="1">
<?php
$dbcon = mysql_connect("@ip","@username","@password");
if($dbcon)
{
mysql_select_db("@database", $dbcon);
}
else
{
die('error connecting to the database');
}
$qry = "select value2(city) from @tablename where ";
$result = mysql_query($qry) or die(mysql_error());
$dropdown = "<select name='@value2' id='officeItemList' style='cursor:pointer;cursor:hand;'>";
while($row = mysql_fetch_array($result))
{
$dropdown .= "\r\n<option value='{$row['@value2']}' > {$row['@value2']} </option>";
}
$dropdown .= "\r\n</select>";
echo $dropdown;
mysql_close($dbcon);
?>
</td>
</tr>
答案 0 :(得分:6)
这是错误的方式。在向用户显示页面之前,您的PHP代码已完全执行。所以第二个查询永远不会知道用户选择了什么。
正确的方法#1:分两页进行。第一页包含第一个组合,当它被提交时,第二页生成并显示第二个组合。
正确的方式#2虽然不是最佳的:在一页中做。将第二个组合的所有可能记录加载到某个JS数组。将侦听器放置到第一个数组。当用户选择使用JS-array中的正确记录填充第二个组合时。
正确的方式#3(最右边的):在包含AJAX请求的页面中执行此操作。用户在第一个组合中选择一个值。它的侦听器向某个服务器脚本发送请求,该脚本返回带有第二个组合记录的JSON对象。
答案 1 :(得分:3)
您可以使用AJAX获取所选州的城市。类似的东西:
$("select#state").change(
function(){
var state = $(this).val();
$.ajax({
type: "GET",
url: "get_cities.php/?state=" + state,
// write a query according to the state selected and return the HTML for the OPTION's
success: function(cities){
$("select#cities").html(cities);
}
});
}
);
您还可以返回一个json对象(在这种情况下不要忘记添加dataType:"json"
)并在客户端转换为HTML,即在success
函数内部
答案 2 :(得分:1)
我建议你采用两种方法。
第一个只使用php但需要在呈现页面之前存储每个州的所有可用城市。这是一个糟糕的解决方案!
我建议使用AJAX和另一个PHP脚本的Javascript调用可以解决您的问题!
使用jQuery获得一个让生活更轻松的JavaScript框架!
您的HTML:
<select id="select-state">
<option value="0">Select a state</option>
<option value="ohio">Ohio</option>
</select>
<select id="select-city">
<option value="0">Select a state first</option>
</select>
创建一个php脚本,通过$ _GET [“state”](或$ _POST)使用给定状态进行mysql查询。
将mysql的结果编码为JSON对象并回显它!
{
cities: [
'City 1',
'City 2',
...
]
}
php函数:json_encode()
然后你可以做一些像:
$(function(){
$('#select-state').on("change", function(){
var state = $(this).val();
if(state!=0) {
$.get('your/path/to/cities/script.php?state='+state,function(data){
if(data.cities) {
$('#select-city').empty(); //remove old entries first
for (var city in data.cities) {
$option = $('<option>').val(city);
$('#select-city').append($option);
}
}
});
}
});
});