php - php如何进行部分搜索/输入和下拉菜单搜索?
问题描述
我正在尝试分别进行此搜索/部分搜索和下拉菜单搜索。例如,当我使用下拉菜单搜索时,输入搜索栏将为空,仅显示下拉菜单搜索栏的结果。当我只进行部分搜索时,我的代码工作正常,但每当我使用下拉菜单搜索时,如果输入栏为空,它只会显示数据库中的所有结果。有解决方法吗?谢谢 :) 我试过弄乱 % 符号,但它仍然不能按我想要的方式工作。
if(isset($_POST['submit'])){
$search = $db->real_escape_string($_POST['search']);
$category = $_POST['category'];
$resultSet = $db->query("SELECT * FROM books WHERE booktitle LIKE '%$search%' OR category = '$category'");
echo "<table border='1'>";
echo "<th>Author</th><th>Book Title</th><th>Reserved</th>";
if($resultSet->num_rows > 0){
while($rows = $resultSet->fetch_assoc()){
$au = $rows['author'];
$bt = $rows['booktitle'];
$rev = $rows['reserved'];
echo"<tr><td>$au</td><td>$bt</td><td>$rev</td></tr>\n";
}
echo"</table>";
}
解决方案
您的问题是,如果搜索为空白,则 WHERE 部分将显示为“WHERE booktitle LIKE '%%'”,实际上每一行都会匹配。
你可以像这样调整它:
if(isset($_POST['submit'])){
$search = $db->real_escape_string($_POST['search']);
if ($search != "") {
$search = "%" . $search . "%";
}
$category = $_POST['category'];
$resultSet = $db->query("SELECT * FROM books WHERE booktitle LIKE '$search' OR category = '$category'");
echo "<table border='1'>";
echo "<th>Author</th><th>Book Title</th><th>Reserved</th>";
if($resultSet->num_rows > 0){
while($rows = $resultSet->fetch_assoc()){
$au = $rows['author'];
$bt = $rows['booktitle'];
$rev = $rows['reserved'];
echo"<tr><td>$au</td><td>$bt</td><td>$rev</td></tr>\n";
}
echo"</table>";
}
}
这基本上使 LIKE 语句仅在必要时才包含 % 运算符。这不是一个完美的解决方案,但它应该可以完成工作。
推荐阅读
- java - 标记 CSV 行转义双引号
- javascript - TypeScript:TypeError:无法设置未定义的属性“测试”
- java - Picocli:为具有 Map 类型的选项指定默认值
- python - 为什么python会像这样自动对我的字典进行排序?
- swift - 地图中的 SF 符号不会应用颜色
- c# - 如何将 WPF ItemsControl 源绑定到列表段
- c# - 我应该如何处理在集线器中调用相同方法的多个客户端?
- html - How to insert text into a text file on a specific line or after a specific word?
- javascript - 表单 onSubmit={handleSubmit} 通过任何具有 type="submit" 或未指定的按钮或在文本框上输入后触发
- javascript - 我的解决方案有什么问题,加入数组元素?