基于用户输入的MySQL查询 - 多个下拉菜单

时间:2012-10-05 14:36:29

标签: javascript jquery mysql

我正在创建一个下拉选项,其中每个子选择,查询结果来自前一个。在我发现一个类似的帖子之后,我搜索并形成了我的作品,不幸的是,我仍然无法让它工作。任何帮助都是极好的。谢谢。

我使用select作为下拉列表,id = level1,level2,level3等。

这是我的代码的html下拉列表选择部分

Enter Auction Category : <input type="text" name="fcv" id="fcv" /> <br> 
or Select Category : <br> 
<select class="sspecial" name="level1" id="level1" onchange="getDropdownOptions()"> 
<option></option>

<? 
$level1_sql="SELECT * FROM Ebay_Category WHERE Level = '1' ORDER BY Category"; 
$level1_results=mysql_query($level1_sql); 
while($level1=mysql_fetch_array($level1_results)) { 
  if ($level1['Leaf']) { 
    echo "<option value='".$level1['ebay_category_id']."'>".$level1['Category']."</option>"; 
   } else { 
  echo "<option value=''>".$level1['Category']."</option>"; 
  } 
} 
?> 

</select> 



<br><br> 
<select class="sspecial" name="level2" id="level2"> 
<option value=''></option> 
</select> 

用户只能看到为level1填充的下拉列表。然后他们从中进行选择 - 此时,我希望level2能够填充基于1级选择的查询。

这是我依赖的javascript

<script type="text/javascript">
$(document).ready(function() {
    $('#level1').change(getDropdownOptions);
});

function getDropdownOptions() {
    var val = $(this).val();
    // fire a POST request to populate_L2.php
    $.post('populate_L2.php', { value : val }, populateDropdown, 'html');
}

function populateDropdown(data) {
    if (data != 'error') {
            $('#level2').html(data);
}
}


</script>

我将使用6个等级或选择。

  1. 1岁的孩子
  2. 2岁的孩子
  3. 3岁的孩子 等等。
  4. 我不太了解javascript,看看它是如何实际填充下一个选项列表的 - 这意味着,我确信我已经遗漏了一些东西。

    通过上面的菜单,菜单从原始查询中提取父项, 但在变化时,随后的任何事都没有发生。

    提前感谢您提供任何方向或帮助。

    再次感谢你。

    编辑:显示我的populate_L2.php代码

    mysql_connect("$servername", "$dbusername", "$dbpassword")or die("cannot connect");
    mysql_select_db("$dbname")or die("cannot select DB");
    $parentid=$_GET['value'];
    
    $postSQL="select * Ebay_Category where Level='2' and ParentID=$parentid";
    
    $postSelect=mysql_query($postSQL);
    $html = "<option>--select--</option>";
    
    while ($row = mysql_fetch_array($postSelect)) 
    {
        if($row['Leaf']!=0){
        $html .= "<option value='".$row['CategoryID']."'>".$row['Category']."</option>";
        } else {
            $html .= "<option value=''>".$row['Category']."</option>";
        }
    
    }
    

    关于安置的一个词。我在文档的头部有javascript。我有其他脚本在那里完美地工作 - 这个脚本是最后一个加载在head部分的脚本。

    因为我发布了这个 - 我验证了我的表名,我的字段名称,然后输入一个echo来告诉我populate_L2.php是否被移交任何焦点 - 它不是。

    已编辑

    我刚刚发出警报('getDropdownOptions已被执行'); getDropdownOptions()函数内部的行 - 当我更改下拉列表的值时 - 没有任何更改,也没有警报....

    再次感谢您的任何建议。

    解决了,有点 - 使用jquery。现在我需要打开一个我认为的新问题,因为从技术上讲,它解决了我原来的问题。

    要做下拉列表,最多3个成功执行以下操作;

    在标题中创建了一个脚本;

        <script type="text/javascript">
        function getInfo(str) 
        {
    if (str=="")
      {
      document.getElementById("catTitle").innerHTML="";
      return;
      } 
    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.onreadystatechange=function()
      {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
        document.getElementById("catTitle").innerHTML=xmlhttp.responseText;
        }
      }
    xmlhttp.open("GET","cat_title.php?q="+str,true);
    xmlhttp.send();
    }
    </script>
    

    然后在同一份文件中,

    我使用onchange ='getInfo(this.value)'调用创建了我的第一个select 我在同一份文件中添加了 标识为catTitle的span标记 (也为每个附加选择重复它)

    然后,我在脚本中调用了cat_title.php文件,

        $vx=$_GET["q"];
    $SQL="SELECT * FROM Ebay_Category WHERE ParentID='".$vx."' ORDER BY Category";
    $result=mysql_query($SQL);
    
    echo "<select id='lev3' onchange='getInfo2(this.value)'>";
    while ($row=mysql_fetch_array($result)){
        echo "<option value='".$row['CategoryID']."'>".$row['Category']."</option>";
    }
        echo "</select>";
    

    将echo发送到表单而不重新加载,并为我创建一个新的选择框以选择下一个选项。

    这允许我使用1级选择值树下来显示2的选项,然后选择选项2,使用该值显示第3组选项 - 这是我个人有问题的地方,因为我不能去任何进一步

    xmlhttp.status = 500,在第一个2之外的所有呼叫上。我希望找到一种方法来重置 - 如果你还需要一个更深层次的解决方案,请检查我的问题 - 因为我将要求特别为该部分提供更强大的Stack Overflow支持。

1 个答案:

答案 0 :(得分:1)

Chained Selects jQuery插件可以满足您的需求。

相关问题