Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用下拉菜单更改SQL查询中的值?_Php_Mysql_Drop Down Menu - Fatal编程技术网

Php 如何使用下拉菜单更改SQL查询中的值?

Php 如何使用下拉菜单更改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

目前我有两个页面显示用户信息表。这两个页面中唯一的区别是SQL查询中的一个值。我想做的是只有一个页面,使用下拉菜单选择我想要显示的结果

我目前有:

page1.php

<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>