Php 如何使用下拉菜单更改SQL查询中的值?
目前我有两个页面显示用户信息表。这两个页面中唯一的区别是SQL查询中的一个值。我想做的是只有一个页面,使用下拉菜单选择我想要显示的结果 我目前有: page1.phpPhp 如何使用下拉菜单更改SQL查询中的值?,php,mysql,drop-down-menu,Php,Mysql,Drop Down Menu,目前我有两个页面显示用户信息表。这两个页面中唯一的区别是SQL查询中的一个值。我想做的是只有一个页面,使用下拉菜单选择我想要显示的结果 我目前有: page1.php <table> <tr> <th>Username</th> <th>level</th> </tr> <?php try { $stmt = $db->query('SELECT username, level, FROM
<table>
<tr>
<th>Username</th>
<th>level</th>
</tr>
<?php
try {
$stmt = $db->query('SELECT username, level, FROM members WHERE level < 5 ORDER BY username');
while($row = $stmt->fetch()){
echo '<tr>';
echo '<td>'.$row['username'].'</td>';
echo '<td>'.$row['level'].'</td>';
echo '</tr>';
}
} catch(PDOException $e) {
echo $e->getMessage();
}
?>
</table>
用户名
数量
page2.php
<table>
<tr>
<th>Username</th>
<th>level</th>
</tr>
<?php
try {
$stmt = $db->query('SELECT username, level, FROM members WHERE level > 4 ORDER BY username');
while($row = $stmt->fetch()){
echo '<tr>';
echo '<td>'.$row['username'].'</td>';
echo '<td>'.$row['level'].'</td>';
echo '</tr>';
}
} catch(PDOException $e) {
echo $e->getMessage();
}
?>
</table>
用户名
数量
区别是“<5”和“>4”
如何将这两个值设置为下拉菜单中的选项,并压缩为单个页面?考虑到您将使用包含select的POST表单,您可以执行以下操作:
// first the select
// TODO: enclose this in a form directed towards your php script
<select name="choice">
<!--here two options with your desired values-->
</select>
<input type="submit" value="show rows">
以便您可以将其提供给操作sql的函数:
function makeRows($choice) {
switch ($choice) {
case "1":
$where = "level > 4";
break;
case "2":
$where = "level < 5";
break;
default:
throw new \Exception("that choice was not defined");
}
$stmt = $db->query('SELECT username, level, FROM members WHERE '.$choice.' ORDER BY username');
while ($row = $stmt->fetch()) {
echo '<tr>';
echo '<td>'.$row['username'].'</td>';
echo '<td>'.$row['level'].'</td>';
echo '</tr>';
}
}
函数生成行($choice){
交换机($choice){
案例“1”:
$where=“level>4”;
打破
案例“2”:
$where=“级别<5”;
打破
违约:
抛出new\Exception(“未定义该选项”);
}
$stmt=$db->query('SELECT username,level,FROM members,WHERE.$choice.'ORDER BY username');
而($row=$stmt->fetch()){
回声';
回显“.$row['username']”;
回显'.$row['level'].';
回声';
}
}
在基于外部输入的结果执行sql时必须小心,不要将直接输入连接到sql中。请参见我如何“白名单”将要执行的sql
如何使用它:
//在这里放置您制作的包含select
用户名
数量
确保在脚本中包含函数定义…创建一个函数并使用某些参数调用它。我认为这是对服务器和客户端上执行的操作的误解。更改下拉列表返回到服务器,然后使用下拉列表值。因此,将下拉列表放在一个表单中并提交表单。我想我理解,这两个查询的switch语句在这里是否有效,大小写等于下拉值-iv从未使用switch语句执行SQL查询,因此不确定这是否是一种“ok”方法。
function makeRows($choice) {
switch ($choice) {
case "1":
$where = "level > 4";
break;
case "2":
$where = "level < 5";
break;
default:
throw new \Exception("that choice was not defined");
}
$stmt = $db->query('SELECT username, level, FROM members WHERE '.$choice.' ORDER BY username');
while ($row = $stmt->fetch()) {
echo '<tr>';
echo '<td>'.$row['username'].'</td>';
echo '<td>'.$row['level'].'</td>';
echo '</tr>';
}
}
// here put the form you've made containing the select
<table>
<tr>
<th>Username</th>
<th>level</th>
</tr>
<?php
$choice = filter_input(INPUT_POST,"choice",\FILTER_SANITIZE_STRING);
try {
makeRows($choice);
}
} catch(PDOException $e) {
echo $e->getMessage();
}
?>
</table>