1

php、html、およびmysqlデータベースを使用して、あるドロップダウンリストの内容に別の項目の選択を入力しようとしましたが、思ったよりもはるかに難しいことがわかりました。最初のドロップダウン リストでの会社の選択に基づいて、1 つのドロップダウン リストにすべての携帯電話の名前を表示しようとしています。

以下に提供したコードにはエラーはありませんが、2 番目のドロップダウン リストに値が入力されていません。変数「$submittedValue」が正しい値を取得していないため、「$name」にも内容がありません。この理由を理解することができないようです。

私がやったことは、最初のドロップダウンリストで選択したオプションを使用して、それを変数に入れて、2番目のクエリにパラメーターとして渡すことです。

これに対する解決策をいただければ幸いです。

<?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>";

2 番目のメニューのすべてのロジックをコードに入れます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 に答える