麻烦开始使用php中的多个搜索过滤

问题描述 投票:-1回答:1
  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的初学者,正在从事一个项目。我必须提示用户输入搜索查询并过滤结果,具体取决于价格(最低或最高)和食物类别我查了一下互联网,但我不明白该怎么做。我必须限制自己在选择语句上的使用,并使代码更高效。.没有过滤器的搜索绝对正常。你能帮我吗?正在发布部分代码

php mysql
1个回答
0
投票

您可以构建语句的一部分,然后将它们插值到查询字符串中,而不要使用多个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
© www.soinside.com 2019 - 2024. All rights reserved.