如何将数据库的多个表值获取到动态选择框中

时间:2016-02-20 17:41:09

标签: javascript php jquery postgresql

这里我试图从数据库中获取数据到组合框中,其中我有10个表。我有两个组合框,在第一个框中我从数据库调用选项,它将是第一个表,选项如a,b,c,d。现在,当我在第一个框中选择“a”时,它应该通过php调用相应的值,并且该值将来自另一个表,并且这两个表中没有任何共同的键。 与选择'b'时相同,它将调用第3个表中的另一个值。

所以在这里我尝试了if else条件,但我能得到输出。 有人请改进jquery错误,我应该以哪种方式匹配它的条件。

这是我的代码html页面

    <html>
    <body>
    <select id="a1_title">
    </select>
    <select id="a2_title">
    </select> 
    <script src="jquery-2.0.3.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){
      $.getJSON("drpdwn.php", success = function(data){
    var items="";
        for(var i = 0; i< data.length; i++){
           items +="<option value='"+ data[i].toLowerCase() +"'>" + data[i] +"</option>";
        }
        $("#a1_title").append(items); 
        $("#a1_title").change();
      });
   $("#a1_title").change(function(){
    if( data.length == 1) // here i have tried to match the condition from ID but it doesn't work 
{
    alert("b");
      $.getJSON("lulc_db.php",success = function(data){
    alert("okay");
       var items="";
       for(var i = 0; i< data.length; i++){
          items+="<option value='"+data[i].toLowerCase()+"'>"+data[i]+"</option>";
       }
 else   if( data.length == 2) 
{
    alert("b");
      $.getJSON("soil_db.php",success = function(data){
    alert("okay");
       var items="";
       for(var i = 0; i< data.length; i++){
          items+="<option value='"+data[i].toLowerCase()+"'>"+data[i]+"</option>";
       }
        $("#a2_title").append(items); 

      });
     }
    });

});
 </script>
 </body></html>

这是drpdown.php页面。此页面值将成功进入第一个选择框。

<?php
$host = "localhost"; 
$user = "postgres"; 
$pass = "admin"; 
$db = "Querybuilderdb"; 

$con = pg_connect("host=$host dbname=$db user=$user password=$pass")
    or die ("Could not connect to server\n"); 
$query = "SELECT id, name FROM tab";
$result = pg_query($con, $query);
if(pg_num_rows($result)){

$data=array();
while($row=pg_fetch_array($result))
{ array_push($data, $row["name"]);

}

echo  json_encode($data);
}
?>

这里的lulc_db.php。这个页面的值应该出现在第二个选择框中。像这样,我有8个其他的php页面,我已经显示在第二个组合框中。

    <?php 
require "config.php";
$query = "SELECT distinct level_1 FROM pachgaon_LULC";
$result = pg_query($con, $query);
if(pg_num_rows($result)){
$data=array();
while($row=pg_fetch_array($result))
{ array_push($data, $row["level_1"]);
}
echo  json_encode($data);
}
?>

谢谢你提前:)

1 个答案:

答案 0 :(得分:1)

考虑几个变化:

  1. 当一个子级别json(键/值对)变为a时,运行嵌套的for循环 多维javascript数组
  2. 捕获第一个框的选定值:#a1_title
  3. 有条理地关联动态输出框
  4. 在追加新项目之前删除现有项目
  5. 虽然我无法在没有数据和表关系的情况下重新创建示例。下面是一个使用编程语言试图维护初始代码的通用示例。调整您的实际脚本。请参阅jsfiddle上的演示(但这会使用带有点击事件的嵌入式json字符串):

    PHP脚本 (重现json数据)

    // DynamicOptions1.php
    <?php
      $languages = [];
    
      $languages[][1] = "general purpose";
      $languages[][2] = "special purpose";
    
      echo json_encode($languages);
    ?>
    
    // DynamicOptions2.php
    <?php
      $general = [];
    
      $general[][1] = "Java";
      $general[][2] = "PHP";
      $general[][3] = "Perl";
    
      echo json_encode($general);
    ?>
    
    // DynamicOptions3.php
    <?php
      $special = [];
    
      $special[][1] = "SQL";
      $special[][2] = "XSLT";  
    
      echo json_encode($special);
    ?>
    

    HTML / JQuery

    <html>
      <body>
        <select id="a1_title">
        </select>
        <select id="a2_title">
        </select>
    
        <script src="jquery-2.0.3.js"></script>
        <script type="text/javascript">
        $(document).ready(function(){
            $.getJSON("DynamicOptions1.php", success = function(data){
                var items="";
    
                for(var i = 0; i< data.length; i++){
                  for (var item in data[i]) {
                    // RETAIN JSON KEY AS OPTION VALUE, JSON VALUE AS OPTION TEXT
                    items +="<option value='"+item+"'>" + data[i][item].toLowerCase() +"</option>";
                  }
                }
                $("#a1_title").append(items); 
                $("#a1_title").change();
            });
    
            $("#a1_title").change(function(){
              // OBTAIN SELECTED VALUE
              var selectedValue = $(this).find(":selected").val();
    
              if( selectedValue == "1") {              
                  $.getJSON("DynamicOptions2.php",success = function(data){              
                      var items="";
                      for(var i = 0; i< data.length; i++){
                        for (var item in data[i]) {                      
                          items+="<option value='"+data[i][item]+"'>" + data[i][item].toLowerCase() +"</option>";
                        }
                      }
                      // REMOVE PREVIOUS ITEMS
                      var myNode = document.getElementById("a2_title");
                      while (myNode.firstChild) {
                          myNode.removeChild(myNode.firstChild);
                      }
                      // ADD NEW ITEMS
                      $("#a2_title").append(items);  
                  });
              }
              else if( selectedValue == "2") {              
                  $.getJSON("DynamicOptions3.php",success = function(data){              
                      var items="";
                      for(var i = 0; i< data.length; i++){
                        for (var item in data[i]) {
                          items+="<option value='"+data[i][item].toLowerCase()+"'>"+data[i][item].toLowerCase()+"</option>";
                        }
                      }
                      // REMOVE PREVIOUS ITEMS
                      var myNode = document.getElementById("a2_title");
                      while (myNode.firstChild) {
                          myNode.removeChild(myNode.firstChild);
                      }
                      // ADD NEW ITEMS
                      $("#a2_title").append(items);       
                  });
              }          
            });
    
          });
          </script>
    
     </body>
    </html>