为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
胡子哥哥 2021-06-08 17:42:50
所以,我必须做一个网上商店,一个人可以在那里过滤产品。我添加了按钮 [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>';            }        }    }}
查看完整描述

1 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

问题是,如果你得到一个过滤器,你会用正确的过滤器发出一个 db-request,但是之后,你仍然在创建默认的 db-request 来获取所有产品。


与其发出多个数据库请求,不如创建一个。您可以根据从客户端获得的过滤器更改查询。


替代方案 #1 - 动态构建查询

像这样的东西:


$whereConditions = [];

$where           = '';


if (isset($_POST["manj300"])) {

    // Add this filter

    $whereConditions[] = 'price<=300';   

}


// Here you can add more conditions, just like the above if-statement


if ($whereConditions) {

    // We have a condition, implode and add WHERE

    $where = 'WHERE ' . implode(' ', $whereConditions);   

}


// 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)

{

    while($row = mysqli_fetch_array($result))

    {

        // Your current code

    }

}

?>

这种方法的好处是您可以轻松地在同一查询中添加更多条件/过滤器。


缺点是代码变得有点难以阅读。


替代方案 #2 - 选择一个预定义的查询

您可以定义多个查询并选择要使用的查询:


// This is the "get all" query

$query = "SELECT * FROM tbl_product ORDER BY id ASC";


if (isset($_POST["manj300"])) {

    // We have a filter, let's override the default query

    $query = "SELECT * FROM tbl_product price<=300 ORDER BY id ASC";

}


$result = mysqli_query($connect, $query);


if(mysqli_num_rows($result) > 0)

{

    while($row = mysqli_fetch_array($result))

    {

        // Your current code

    }

}

?>

这种方法的好处是它非常干净,易于阅读和遵循。


缺点是您只能同时启用一个过滤器。


查看完整回答
反对 回复 2021-06-13
  • 1 回答
  • 0 关注
  • 135 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信