php - 当某些字段可能未填写时,通过多个字段过滤数据库

标签 php mysql

所以我想构建一个过滤功能,用户可以在表单页面上填写任意数量的输入。因此他们可能会将一些过滤器留空。如何在数据库中搜索仅用户提交的值?我知道如何做到这一点的唯一方法是使用大量的 if 语句来解释他们填写的表格的每种可能的组合,例如:

<?php

if(isset($max) && isset($min) && isset($rank)) {

    mysqli_query($connect, "SELECT * FROM books WHERE ...")

} else if (isset($max) && (isset($min))) {

    // so on and so forth

}

现在,上面的代码可能看起来易于管理,如果我只有 3 个过滤器,情况就会如此,但在这种情况下,我有一个相当大的过滤器列表,只有在用户提交某些内容时才需要应用它们。总而言之,我认为不同过滤器的潜在组合大约有 30 种。

预先感谢您的帮助。

最佳答案

您可以逐部分构造查询字符串。首先你设置:

$s = "SELECT * FROM books WHERE 1 ";

然后在您编写的每个过滤器上:

if(isset(...)) {
    $s .= " AND myfield = $myvalue ";
}

最后你可以附加:

$s .= " ORDER BY somewhat;";

当然应该进行一些转义或者更好地使用 mysqli_ 查询。

将条件“1”放在 WHERE 之后可帮助您在每一行中使用 AND 运算符来确定它是否是第一个事件条件。如果您的 POST 数据结构良好,您可以将条件放入 while 循环中。您可以将 HTML 输入字段命名为“filter[1]”、“filter[2]”等,然后您可以使用循环对其进行迭代。

关于php - 当某些字段可能未填写时,通过多个字段过滤数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44079021/

相关文章:

Python-属性错误: module 'mysql' has no attribute 'connector'

php - React SecureServer 运行但在浏览器中抛出 SSL_ERROR_NO_CYPHER_OVERLAP

php - 如何获取机器所有配置的IP?

mysql - 在 3 个表之间选择/插入数据

php - 如何在特定结果布局中组合具有不同行数的表

mysql - MongoDB 相当于 SQL "NOT LIKE"查询

php - 如何将表单中的数组添加到一起并将它们添加到数据库中的一个字段中?

javascript - 警告 div innertext 时未定义

php - 无法从表中获取完整值

php - 迭代多个 $_POST 数组