php - 根据下拉列表选择从数据库填充另一个选择下拉列表

标签 php javascript ajax

我正在构建一个网站来学习编码,并尝试构建一个工具,用户单击一个选择/下拉菜单,其中包含从数据库 cat 中提取的一些类别名称,然后另一个选择将出现从数据库 subcat 中提取的子类别名称。这几乎与 Yelp 的完全一样(进入类别)like Yelp's (go down to the categories) .

我还做了一个图表:

enter image description here

我已经有一个从 cat 数据库中提取的类别下拉列表:

<p><b>Category:</b><br />
 <?php
  $query="SELECT id,cat FROM cat";
  $result = mysql_query ($query);
  echo"<select name='cselect3' class='e1'><option value='0'>Please Select A       Category</option>";
  // printing the list box select command
  while($catinfo=mysql_fetch_array($result)){//Array or records stored in $nt
  echo "<option value=\"".htmlspecialchars($catinfo['cat'])."\">".$catinfo['cat']."    </option>";

  }

echo"</select>";
?>

我有一个从子目录数据库中提取的子目录:

<p><b>Subcat1:</b><br />
<?php
  $query="SELECT id,subcat FROM subcat";
  $result = mysql_query ($query);
  echo"<select name='sselect1' class='e1'><option value='0'>Please Select A Category</option>";
  // printing the list box select command
  while($catinfo=mysql_fetch_array($result)){//Array or records stored in $nt
      echo "<option value=\"".htmlspecialchars($catinfo['subcat'])."\">".$catinfo['subcat']."</option>";

  }

 echo"</select>";
?>

如何根据用户在类别上单击的内容制作子类别下拉列表并使其自动显示? 非常感谢您的帮助!

最佳答案

我只需将变量放入 php 的 javascript 中,然后使用 javascript 函数..不需要 jquery 或 AJAX。

但是无论如何,您都需要为子类别设置一个外键..即 - 对于 subcat 表中的每条记录,您需要给它一个 catid 以便引用...

<?php
  $db = new mysqli('localhost','user','password','dbname');//set your database handler
  $query = "SELECT id,cat FROM cat";
  $result = $db->query($query);

  while($row = $result->fetch_assoc()){
    $categories[] = array("id" => $row['id'], "val" => $row['cat']);
  }

  $query = "SELECT id, catid, subcat FROM subcat";
  $result = $db->query($query);

  while($row = $result->fetch_assoc()){
    $subcats[$row['catid']][] = array("id" => $row['id'], "val" => $row['subcat']);
  }

  $jsonCats = json_encode($categories);
  $jsonSubCats = json_encode($subcats);


?>

<!docytpe html>
<html>

  <head>
    <script type='text/javascript'>
      <?php
        echo "var categories = $jsonCats; \n";
        echo "var subcats = $jsonSubCats; \n";
      ?>
      function loadCategories(){
        var select = document.getElementById("categoriesSelect");
        select.onchange = updateSubCats;
        for(var i = 0; i < categories.length; i++){
          select.options[i] = new Option(categories[i].val,categories[i].id);          
        }
      }
      function updateSubCats(){
        var catSelect = this;
        var catid = this.value;
        var subcatSelect = document.getElementById("subcatsSelect");
        subcatSelect.options.length = 0; //delete all options if any present
        for(var i = 0; i < subcats[catid].length; i++){
          subcatSelect.options[i] = new Option(subcats[catid][i].val,subcats[catid][i].id);
        }
      }
    </script>

  </head>

  <body onload='loadCategories()'>
    <select id='categoriesSelect'>
    </select>

    <select id='subcatsSelect'>
    </select>
  </body>
</html>

关于php - 根据下拉列表选择从数据库填充另一个选择下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56318640/

相关文章:

javascript - 如何使用 Vivus js 沿 SVG 路径为形状或图像文件设置动画?

javascript - 使用 AJAX 将数据从 PHP 返回到 JavaScript - 数据类型错误?

php - 使用 ssl 公钥/私钥的基于 Web 的登录?

php - 显示具有多个需要累加的值的左连接

php - 如何使 WordPress 帖子或页面上的预览链接指向其他地方?

javascript - 无法将参数传递给 mongo find 集合

php - 在没有顶级的情况下呈现 Zend Navigation 的事件分支

javascript - 是否可以像 C# 或 Ruby 那样提供 javascript 部分类行为?

ajax - tomcat 上下文元素

javascript - 使用ajax获取的按钮没有响应