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

时间:2013-05-06 21:05:01

标签: php mysql data-binding drop-down-menu dynamic-data

我一直在尝试使用php,html和mysql数据库填充一个下拉列表的内容,选择另一个项目的内容,事实证明它比我想象的要困难得多。我想在第一个下拉列表中根据公司选择显示一个下拉列表显示所有手机的名称。

我在下面提供的代码没有错误,但第二个下拉列表没有填充。变量'$ submittedValue'没有得到正确的值,因此'$ name'也没有内容。我似乎无法找出原因。

我所做的是,尝试在第一个下拉列表中使用所选选项,将其放入变量并将其作为参数传递给第二个查询。

我对此的解决方案将不胜感激。

<?php

 $con=mysqli_connect("localhost","root","","dbmobiles");

 // Check connection
 if (mysqli_connect_errno($con)) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
 }

 $options = '';
 $submittedValue = '';
 $name=" ";

 $q1=mysqli_query($con,"select distinct compName from umobile order by compName ASC");
 while($row = mysqli_fetch_array($q1)) {
    $options .="<option value=". $row['compName'] ." >" . $row['compName'] .    "</option>";
 }

 $menu1 = "<form id='filter' name='filter' method='post' action=' '>    
           <p><label>Select Company</label></p>
           <select name='filter' id='filter'>
           " . $options . "
           </select>
          </form>";

 if (isset($_POST["filter"])) {
    $submittedValue = $_POST["filter"];
 }
 echo $menu1;

 if ($q2=mysqli_prepare($con,"SELECT DISTINCT mobname FROM umobile WHERE compName=? "))
 {
    mysqli_stmt_bind_param($q2,"s",$submittedValue);
    $s=$submittedValue;
    mysqli_stmt_execute($q2);
    mysqli_stmt_bind_result($q2,$r);
 }  

 while(mysqli_stmt_fetch($q2)) {
    $name .="<option>".$r['mobname']."</option>";
 }

 echo ".$name.";
 $menu2 = "<form id='moblist' name='moblist' method='post' action=' '>
            <p><label>Select Mobile</label></p>
            <select name='moblist' id='moblist'>
            " . $name . "
            </select>
           </form>";

 echo $menu2;
?>

2 个答案:

答案 0 :(得分:1)

别忘了引用.$r['mobname'].

$name .="<option value=\"".$r['mobname']."\" >".$r['mobname']."</option>";

仅限$ _POST测试。

if (isset($_POST["filter"])) {
    $submittedValue = $_POST["filter"];
}

如果$ _POST [&#34;过滤器&#34;] 未设置怎么样?

你的代码没有处理这个事实。他总是贯穿$ menu2部分。

你的$ _POST顾名思义就是帖子。要评估一个$ _POST必须做一个帖子。

 <input type="submit" name="Submit" value="Submit" />

例如

 $menu1 = "<form id='filter' name='filter' method='post' action=' '>    
             <p><label>Select Company</label></p>
            <select name='filter' id='filter'>
             " . $options . "
            </select>
            <input type=\"submit\" name=\"Submit\" value=\"Send\" />
          </form>";

将第二个菜单的所有逻辑放在代码if (isset($_POST["filter"])) {

 echo $menu1;

 if (isset($_POST["filter"])) {
    $submittedValue = $_POST["filter"];
      if ($q2= ....)
       {
         mysqli_stmt_bind_param($q2,"s",$submittedValue);
         $s=$submittedValue;
         mysqli_stmt_execute($q2);
         mysqli_stmt_bind_result($q2,$r);

         while(mysqli_stmt_fetch($q2)) {
         $name .="<option value=\"".$r['mobname']."\" >".$r['mobname']."</option>";
         }

         $menu2 = "<form id='moblist' name='moblist' method='post' action=' '>
            <p><label>Select Mobile</label></p>
            <select name='moblist' id='moblist'>
            " . $name . "
            </select>
           </form>";

        echo $menu2;
       }  
   }

<强>更新

你不能将$ r [&#39; mobname&#39;]用于绑定。

mysqli_stmt_bind_result($q2,$r);
....
while(mysqli_stmt_fetch($q2)) {
$name .="<option value=\"".$r['mobname']."\" >".$r['mobname']."</option>";

}

使用它。

mysqli_stmt_bind_result($q2,$r);
....
while (mysqli_stmt_fetch($q2)) {
$name .="<option value=\"".$r."\" >".$r."</option>";
}


mysqli_stmt_close($q2);

更新2

你忘了把它引用到

 $options .="<option value=". $row['compName'] ." >" . $row['compName'] .    "</option>";

 $options .="<option value=\"". $row['compName'] ."\" >" . $row['compName'] .    "</option>";

答案 1 :(得分:0)

$menu1 = "<form id='filter' name='filter_form' method='post' action=' '>    
           <p><label>Select Company</label></p>
           <select onchange='filter_form.submit()' name='filter' id='filter'>
           " . $options . "
           </select>
          </form>";

表单中没有提交按钮,无论是放置提交按钮还是尝试提交下拉值选择。 只有这样(if _ $ POST ['filter'])才为真,你的变量才能成功获得作业