if ($_SERVER["REQUEST_METHOD"]=="POST")
{
if(isset($_POST["searchQuery"]))
{
if(empty($_POST["searchQuery"]))
{
$searchErr="Field cannot be empty!";
}
else //no error
{
$searchData=test_input($_POST["searchQuery"]);
$searchData=preg_replace("#[^0-9a-z]#i","",$searchData);
echo $searchData;
require_once('includes/db_connect.php');
$order="";
if (isset($_POST['price']))
{
if ($_POST['price']=='priceAsc')
{
$order="ORDER BY Food_Price(Rs)";
if ($_POST['price']=='priceAsc')
{
$order.="ASC";
}
else
{
$order.="DESC";
}
}
}
$category_filter="";
if(isset($_POST['category']) && !empty($_POST['category']))
{
$foodType=$_POST['category'];
$category_filter="AND Food_Type='$foodType'";
}
$sQuery="SELECT * FROM food WHERE (LOWER(Food_Name) LIKE
LOWER('%$searchData%') OR LOWER(Food_Description) LIKE
LOWER('%$searchData%')).$category_filter.$order";
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$results=$conn->query($sQuery);
$numResults=$results->rowCount();
if ($numResults==0)
{
$msg="No results found";
echo $msg;
}
else
{
while($row=$results->fetch(PDO::FETCH_ASSOC))
{
echo $row['Food_Name'];
echo "<br/>";
}
}
}
}
}
你好,伙计们。我是php的初学者,正在从事一个项目。我必须提示用户输入搜索查询并过滤结果,具体取决于价格(最低或最高)和食物类别我查了一下互联网,但我不明白该怎么做。我必须限制自己在选择语句上的使用,并使代码更高效。.没有过滤器的搜索绝对正常。你能帮我吗?正在发布部分代码
您可以构建语句的一部分,然后将它们插值到查询字符串中,而不要使用多个sql。
在下面的示例中,如果价格和/或类别为空,您将获得一个简单的查询,其中没有多余的过滤器,但是如果其中确实包含某些内容,则会创建必填子句。
我将此文件制成独立文件,因此您可以检查查询的外观并使其适合您的情况:
<?php
if(isset($_POST['submit'])) {
// define order
$order = '';
if(isset($_POST['price']) && !empty($_POST['price'])) {
$order = " ORDER BY Food_Price(Rs) ";
if($_POST['price'] == 'priceAsc') {
$order .= "ASC";
} else {
$order .= "DESC";
}
}
// define category filter
$category_filter = '';
if (isset($_POST['category']) && !empty($_POST['category'])) {
$category_filter = " AND Food_Category = '" . $_POST['category']. "'";
}
// searchdata
$searchData = $_POST['searchData'];
// build query
$sQuery = "SELECT * FROM food "
. "WHERE ( LOWER(Food_Name) LIKE LOWER('%$searchData%') "
. "OR LOWER(Food_Description) LIKE LOWER('%$searchData%') ) "
. $category_filter
. $order;
// echo query
echo "<pre>" . $sQuery . "</pre>";
}
?>
<form method="POST">
<input type="text" name="searchData" value="Pepsi">
<input type="text" name="price" value="priceAsc">
<input type="text" name="category" value="Beverages">
<input type="submit" name="submit" value="Test">
</form>
输出:
没有价格或类别,您不会得到:
SELECT * FROM food WHERE ( LOWER(Food_Name) LIKE LOWER('%Pepsi%') OR LOWER(Food_Description) LIKE LOWER('%Pepsi%') )
同时获得价格和类别,您将获得:
SELECT * FROM food WHERE ( LOWER(Food_Name) LIKE LOWER('%Pepsi%') OR LOWER(Food_Description) LIKE LOWER('%Pepsi%') ) AND Food_Category = 'Beverages' ORDER BY Food_Price(Rs) ASC