动态MySQL查询取决于动态PHP下拉列表

时间:2017-10-14 13:38:50

标签: php html mysql

我正在寻找有关如何根据动态PHP下拉列表从数据库中获取不同MySQL查询的帮助。下面是我到目前为止所做的一切(1.创建数据库,2。创建PHP动态下拉列表,3。斗争部分 - 如何获取HTML / PHP表单更改它的MySQL查询取决于选择的动态下拉列表步骤2)。

这是我的创建数据库:

CREATE TABLE computers (
id           int(3) NOT NULL auto_increment primary key, 
pc_make      varchar(25) NOT NULL default '', 
pc_model      varchar(25) NOT NULL default ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


INSERT INTO computers VALUES (1, 'Dell', 'Latitude'); 
INSERT INTO computers VALUES (2, 'Dell', 'Inspiron'); 
INSERT INTO computers VALUES (3, 'HP', 'Pavilion'); 
INSERT INTO computers VALUES (4, 'HP', 'Spectre');
INSERT INTO computers VALUES (5, 'Lenovo', 'Thinkpad'); 
INSERT INTO computers VALUES (6, 'Lenovo', 'Ideapad');

以下是生成动态下拉列表的部分(它为我提供了3个不同记录的结果:“Dell”,“HP”和“Lenovo”):

<?   

 $connect = mysqli_connect('localhost', '', '', ''); 
 $sql="SELECT DISTINCT(pc_make) AS pc_make FROM computers ORDER BY pc_make ASC"; 
 $result  = mysqli_query($connect, $sql);  

 if(mysqli_num_rows($result) > 0){  
 $output= '<select name="listofpcmakes">';
 while($rs = mysqli_fetch_array($result)){  

  $output.='<option value="'.$rs['id'].'">'.$rs['pc_make'].'</option>';

  }
}
$output.='</select>';
echo $output;
?>

以下是我尝试仅从动态创建的下拉列表中显示与所选pc_make匹配的记录(例如Dell,应该产生2条记录)。看起来我只是在这里撞墙。

<html>
<body>

         <form id="my_form" name="my_form" method="post"> 
         <table class="table">
              <thead>
                <tr>
                  <th>id</th>
                  <th>pc_make</th>
                  <th>pc_model</th>               
                </tr>
              </thead>
              <tbody>

<?PHP

 $sql_final="SELECT * FROM computers WHERE pc_make = (how to capture the 'selected pc_model' from the dynamically generated dropdown???) "; 
 $result_final  = mysqli_query($connect, $sql_final); 

                    while ($myrow = mysqli_fetch_array($result_final)) 

                    {
                  ?>
                <tr>
                  <td><?PHP echo $myrow["id"]; ?></td>
                  <td><?PHP echo $myrow["pc_make"]; ?></td>
                  <td><?PHP echo $myrow["pc_model"]; ?></td>                  
                </tr>
         <?PHP
              }
                  ?>


</body>               
</html>               

要重述此问题,我应该如何构建HTML表单部分,该部分仅为从动态生成的下拉列表中选择的单个制造商(Dell,HP或Lenovo)获取记录(pc_make,pc_model)。我试图避免创建静态mysql查询,因为制造商列表将来可能会发生很大变化。

提前感谢所有人提供帮助......

1 个答案:

答案 0 :(得分:0)

当您从下拉列表中选择一个选项并提交表单时,结果将显示在$_POST superglobal中。因此,您需要检查$_POST并检索下拉列表的值。

在页面顶部:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $selected_pc_model = $_POST['listofpcmakes'];
}

现在,您可以在SQL查询中使用$selected_pc_model

$sql_final="SELECT * FROM computers WHERE pc_make = $selected_pc_model";

使用您在上面提交的代码的更完整示例:

<?php
if (($_SERVER['request_method']) == 'POST') { // Checking to see if form is submitted
    $selected_pc_model = $_POST['listofpcmakes']; // Getting the selected PC model value
}
?>
<html>
<body>

<form id="my_form" name="my_form" method="post">
<table class="table">
    <thead>
    <tr>
        <th>id</th>
        <th>pc_make</th>
        <th>pc_model</th>
    </tr>
    </thead>
    <tbody>

<?php
if (isset($selected_pc_model)) { // if there is a $selected_pc_model
    $sql_final="SELECT * FROM computers WHERE pc_make =" . $selected_pc_model;
    $result_final  = mysqli_query($connect, $sql_final);

    while ($myrow = mysqli_fetch_array($result_final)) {
?>
        <tr>
            <td><?PHP echo $myrow["id"]; ?></td>
            <td><?PHP echo $myrow["pc_make"]; ?></td>
            <td><?PHP echo $myrow["pc_model"]; ?></td>
        </tr>
<?php
    }
} else { // else if there is NOT a $selected_pc_model
        echo '<tr>
                <td>Error: PC Model is not selected.</td>
              </tr>';
}
?>
    </tbody>
</table>

</body>
</html>

当您编写此类代码(例如数据验证和错误检查等)时,还有更多工作要做,但这应该足以让您前进。有关更多信息,请阅读PHP教程和/或学习几门课程。