根据下拉列表中的选定过滤器列出数据库值

Posted

技术标签:

【中文标题】根据下拉列表中的选定过滤器列出数据库值【英文标题】:Listing database values according to the selected filter in dropdown 【发布时间】:2013-12-24 04:14:44 【问题描述】:

如何过滤下拉选项以列出我的表格条目?

html 过滤器示例:

<form action="filter.php" method="post">
  <select name="filter">
    <option>FILTER:</option>
    <option value="alphabetical">ASC</option>
    <option value="date">Date</option>
  </select>
</form>

基本 mysql 选择:

SELECT * FROM table ORDER BY name

列出值的基本 HTML:

echo '<h1>'.$name.'</h1>
      <h1>'.$date.'</h1>';

第二个过滤器(日期)应该执行一个 SELECT,列出所有带有 ASC 日期的条目。第二个第一个(按字母顺序)应该执行一个仅按 ASC 列出所有名称条目的 SELECT。

知道 MySQL SELECT 在这种情况下如何工作吗?

【问题讨论】:

在您的 filter.php 中获取 $_POST['filter'] 值,使用它在您的 php 脚本上创建一个开关并为每个参数创建不同的查询,或者连接“ORDER BY x”语句到一个简单的查询,如 SELECT * FROM 表。 不重定向到 filter.php 有没有办法做到这一点? 是的,通过使用 javascript/jquery ajax 请求,您可以在服务器端执行过滤器并将数据返回给您的客户端,而无需执行任何重定向。 【参考方案1】:

html:

<select name="filter" onchange="filter(this.value)">
  <option>FILTER:</option>
  <option value="alphabetical">ASC</option> 
  <option value="date">Date</option> 
</select>
<div id="results"></div>// store the results here

jQuery:

function filter(item)
$.ajax(
type: "POST",
url: "filter.php",
data:  value: item,
success:function(data)
  $("#results").html(data);

);

filter.php:

include "connection.php";  //database connection
$fieldname = $_POST['value'];
 if($fieldname=="alphabetical")
  // if you choose first option
  $query1 = mysqli_query("SELECT * FROM table ORDER BY name ASC"); 
  // echo the results
  else
  // if you choose second option
  $query1 = mysqli_query("SELECT * FROM table ORDER BY date ASC");
  // echo the results

注意:不要忘记包含 jquery 库。

【讨论】:

谢谢你的回答,笑话。当我选择一个选项时,例如“按字母顺序”,我的列表没有任何变化,我认为这是因为没有“操作”。我将编辑代码。 我建议你在这里使用 ajax 而不是 form 显示消息而不刷新页面.. 我使用了这个: 再次谢谢你,笑话。我需要将 SELECT 放在表单中吗? 嘿,我刚刚发现:我需要将我的数组包含在不同的文件中。谢谢你,笑话!没有你的帮助是无法完成的。【参考方案2】:

这些应该可以工作,假设名称和日期是表中的字段名称。

SELECT * FROM table ORDER BY name ASC
SELECT * FROM table ORDER BY date ASC

【讨论】:

【参考方案3】:

我会做这样的事情,

HTML:

<form action="filter.php" method="post">
  <select name="filter">
    <option>FILTER:</option>
    <option value="alphabetical">ASC</option>
    <option value="date">Date</option>
  </select>
</form>

PHP

<?php
    switch($_POST['filter'])
        case "alphabetical":
           $field = "name";
           break 1;
        case "date":
           $field = "date";
           break 1;
    

 $mysqli = new mysqli("localhost", "my_user", "my_password", "world");
 $stmt = $mysqli->prepare("SELECT * FROM table ORDER BY ? ASC");
 $stmt->bind_params("s",$field);
 $stmt->execute();

 //ETC
?>

【讨论】:

以上是关于根据下拉列表中的选定过滤器列出数据库值的主要内容,如果未能解决你的问题,请参考以下文章

SWR 根据下拉列表中的选定值获取数据

根据下拉列表中的选定值显示表单字段Angular TypeScript

下拉以根据单个组件中另一个下拉列表中的选定值刷新值

当某个值返回为空时,如何使用下拉列表中的选定值?

如何根据下拉列表中的选定数字生成表单输入字段(选择)

如何使用 Laravel 在下拉列表中显示数据库中的选定值?