1

我一直在尝试使用 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;
?>
4

2 回答 2

1

不要忘记引用.$r['mobname'].

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

您的 $_POST 仅测试。

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

如果 $_POST["filter"]没有设置呢?
您的代码没有考虑到这个事实。他总是遍历 $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['mobname'] 与绑定一起使用。

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>";
于 2013-05-06T21:59:49.653 回答
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']) 才会为真,并且您的变量将成功获得分配

于 2013-05-06T21:46:26.400 回答