我正在寻找有关如何根据动态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查询,因为制造商列表将来可能会发生很大变化。
提前感谢所有人提供帮助......
答案 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教程和/或学习几门课程。