猿问

PHP 为什么我的过滤不能正常工作

所以,我必须做一个网上商店,一个人可以在那里过滤产品。我添加了按钮 [pod 300€] 和 [vsi izdelki]。但是现在当我点击按钮 [pod 300€] 时,它会显示低于 300€ 的产品,但也会显示下面的所有产品。如何解决这个问题,当我点击 [pod 300€] 时,它只显示 300€ 以下的产品。


<?php 

include "header.php";


$connect = mysqli_connect("localhost", "root", "", "registration");


if(isset($_POST["add_to_cart"]))

{

    if(isset($_SESSION["shopping_cart"]))

    {

        $item_array_id = array_column($_SESSION["shopping_cart"], "item_id");

        if(!in_array($_GET["id"], $item_array_id))

        {

            $count = count($_SESSION["shopping_cart"]);

            $item_array = array(

                'item_id'           =>  $_GET["id"],

                'item_name'         =>  $_POST["hidden_name"],

                'item_price'        =>  $_POST["hidden_price"],

                'item_quantity'     =>  $_POST["quantity"]

            );

            $_SESSION["shopping_cart"][$count] = $item_array;

        }

        else

        {

            echo '<script>alert("Izdelek je že bil dodan")</script>';

        }

    }

    else

    {

        $item_array = array(

            'item_id'           =>  $_GET["id"],

            'item_name'         =>  $_POST["hidden_name"],

            'item_price'        =>  $_POST["hidden_price"],

            'item_quantity'     =>  $_POST["quantity"]

        );

        $_SESSION["shopping_cart"][0] = $item_array;

    }

}


if(isset($_GET["action"]))

{

    if($_GET["action"] == "delete")

    {

        foreach($_SESSION["shopping_cart"] as $keys => $values)

        {

            if($values["item_id"] == $_GET["id"])

            {

                unset($_SESSION["shopping_cart"][$keys]);

                echo '<script>alert("Izdelek odstranjen")</script>';

                echo '<script>window.location="kosarica.php"</script>';

            }

        }

    }

}



胡子哥哥
浏览 136回答 1
1回答

慕妹3146593

问题是,如果你得到一个过滤器,你会用正确的过滤器发出一个 db-request,但是之后,你仍然在创建默认的 db-request 来获取所有产品。与其发出多个数据库请求,不如创建一个。您可以根据从客户端获得的过滤器更改查询。替代方案 #1 - 动态构建查询像这样的东西:$whereConditions = [];$where&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= '';if (isset($_POST["manj300"])) {&nbsp; &nbsp; // Add this filter&nbsp; &nbsp; $whereConditions[] = 'price<=300';&nbsp; &nbsp;}// Here you can add more conditions, just like the above if-statementif ($whereConditions) {&nbsp; &nbsp; // We have a condition, implode and add WHERE&nbsp; &nbsp; $where = 'WHERE ' . implode(' ', $whereConditions);&nbsp; &nbsp;}// Now put the where conditions in your query$query = "SELECT * FROM tbl_product {$where} ORDER BY id ASC";$result = mysqli_query($connect, $query);if(mysqli_num_rows($result) > 0){&nbsp; &nbsp; while($row = mysqli_fetch_array($result))&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; // Your current code&nbsp; &nbsp; }}?>这种方法的好处是您可以轻松地在同一查询中添加更多条件/过滤器。缺点是代码变得有点难以阅读。替代方案 #2 - 选择一个预定义的查询您可以定义多个查询并选择要使用的查询:// This is the "get all" query$query = "SELECT * FROM tbl_product ORDER BY id ASC";if (isset($_POST["manj300"])) {&nbsp; &nbsp; // We have a filter, let's override the default query&nbsp; &nbsp; $query = "SELECT * FROM tbl_product price<=300 ORDER BY id ASC";}$result = mysqli_query($connect, $query);if(mysqli_num_rows($result) > 0){&nbsp; &nbsp; while($row = mysqli_fetch_array($result))&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; // Your current code&nbsp; &nbsp; }}?>这种方法的好处是它非常干净,易于阅读和遵循。缺点是您只能同时启用一个过滤器。
随时随地看视频慕课网APP
我要回答