问题 如何通过从另一个下拉列表中选择值来填充下拉列表?


我通过从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>

4135
2017-12-19 13:05


起源

你打算用php或javascript(AJAX)做什么?这将告诉我们可能的解决方案。 - Awemo
好的,你有任何错误吗?我的意思是你的代码错了 - iJade
技术上对ajax不好,但我想在ajax中技术上很强,所以我的首选是ajax .......... - Ankit Sharma
@jade这段代码是jst用于从数据库中获取记录并显示它,直到我没有任何关于ths的代码,我正在研究这个问题.... - Ankit Sharma


答案:


您可以使用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 功能


3
2017-12-19 13:13





这是错误的方式。您的PHP代码已完全执行 之前 向用户显示页面。所以第二个查询永远不会知道用户选择了什么。

正确的方法#1:两页做。第一页包含第一个组合,当它被提交时,第二页生成并显示第二个组合。

正确的方式#2虽然不是最佳的:在一页中做。将第二个组合的所有可能记录加载到某个JS数组。将侦听器放在第一个数组中。当用户选择使用JS-array中的正确记录填充第二个组合时。

正确的方式#3(最右边的):在包含AJAX请求的页面中进行。用户在第一个组合中选择一个值。它的侦听器向某个服务器脚本发送请求,该脚本返回带有第二个组合记录的JSON对象。


6
2017-12-19 13:13





我建议你有两种方法。

第一个只使用php但需要在呈现页面之前存储每个州的所有可用城市。这是一个糟糕的解决方案!

我建议使用AJAX和Javascript调用另一个PHP脚本可以解决您的问题!

使用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);
                    }
                } 
            });
        }
    });
});

1
2017-12-19 13:23





三个快速点:

  1. mysql不安全(你应该使用PDO或mysqli)
  2. 样式应使用CSS指定,而不是内联
  3. 您最好使用异步请求,这样用户体验会更快捷

请注意,通过使用框架(至少在客户端,如CakePHP或Zend,可以轻松实现上述所有三点,但您也可以查找类似于Knockout.js的Javascript以进行UI交互)


0
2017-12-19 13:14