所以我想构建一个过滤功能,用户可以在表单页面上填写任意数量的输入。因此他们可能会将一些过滤器留空。如何在数据库中搜索仅用户提交的值?我知道如何做到这一点的唯一方法是使用大量的 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/