【问题标题】:Server side cascading dropdown in PHPPHP中的服务器端级联下拉菜单
【发布时间】:2012-06-13 15:34:52
【问题描述】:

由于我在第一个下拉列表中只有一个值,因此我尝试在 PHP 中创建一个级联下拉列表,以填充页面加载时的第二个下拉列表。

我的数据库有一个名为“nights”的表,其中包含名为“city”、“name”和“day”的字段。

为了填充我的第一个盒子,我使用了 SELECT DISTINCT cities from nights 等,效果很好。

要填写第二个框,我需要类似于 SELECT name WHERE city = $city 的内容 - 我的问题是我不确定如何设置 $city(作为 <select> 标签的名称)。我无法使用$_POST['city'],因为此时尚未发送表单。

有什么想法吗?

【问题讨论】:

  • 将第二个框留空,直到选中 city
  • 我应该补充一点:我现在试图避免使用 JS/jQuery,只是因为我对它不是很有经验,我需要在接下来的几天内完成该网站。

标签: php mysql html variables drop-down-menu


【解决方案1】:

如果您希望它是动态的(即在用户更改下拉列表之后),您将必须使用 javascript 来首先查询 PHP 页面(可能使用 jQuery get)然后相应地调整下拉列表。网上有很多这方面的教程。

如果您只想填充初始页面数据,您可以从查询中选择第一个城市并将选项设置为选中,然后在下一个查询中使用该城市。

类似:

$first = True;
while($row = mysql_fetch_array($result))
{
    echo "<option" . (($first) ? " selected" : "") . ">" . $row['city'] . "</option>";
    if($first) 
    {
        $first = !$first;
        $city = $row['city'];
    }
}
//now do stuff with with $city

【讨论】:

    【解决方案2】:
    <?    
    $CITIES = query_result("SELECT DISTINCT cities FROM nights;");
    if (isset($_POST["city"])) {
      $NAMES = query_result("SELECT name FROM nights WHERE city = '{$_POST[city]}'");
      if (isset($_POST["day"]) 
        $DAYS = query_result("SELECT day FROM nights WHERE city='{$_POST[city]}'".
                             " AND name = '{$_POST[name]}'");
      else
        $DAYS = array();
    } else
      $NAMES = array();  
    
    /* now output the <select> markup for $CITIES, $NAMES and $DAYS */
    ?>
    

    注意:你必须自己定义query_result函数(我只是用它来简化代码)。

    【讨论】:

      【解决方案3】:

      您可以为此使用 AJAX。

      在更改事件时调用 javascript-ajax 函数,该函数调用 php 脚本,这使您成为第二个下拉菜单。

      【讨论】:

        【解决方案4】:

        您需要使用 ajax 从 php 脚本加载选项。 这是一个如何使用 jquery 和 ajax 进行操作的示例: Autopopulate Select Dropdown Box Using jQuery

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-03
          • 1970-01-01
          • 1970-01-01
          • 2018-09-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多