Php 购物车数量问题

Php 购物车数量问题,php,Php,我正在尝试编写一个页面,其中包含以下项目: 产品类别,在产品类别中,该类别的唯一项目,以及用户可以在每个类别中选择X数量的所述唯一项目的数量 在购物车中选择时,格式如下所示: 项目类别 所述类别的每个唯一id 订购的类别数量 这就是我对每一件作品的定义 $product\U name=$\U POST[product\U name]-类别 $product_id=$_POST[product_id];-类别中每个项目的唯一标识符 $product\U qty=$\U POST[product\U

我正在尝试编写一个页面,其中包含以下项目:

产品类别,在产品类别中,该类别的唯一项目,以及用户可以在每个类别中选择X数量的所述唯一项目的数量

在购物车中选择时,格式如下所示:

项目类别 所述类别的每个唯一id 订购的类别数量

这就是我对每一件作品的定义

$product\U name=$\U POST[product\U name]-类别

$product_id=$_POST[product_id];-类别中每个项目的唯一标识符

$product\U qty=$\U POST[product\U qty]-所选数量

$product\u id是一个字符串。假设我有唯一的ID 2,4,6,8,所以当选择数量1时,只选择ID 2。如果选择了数量4,则选择ID 2、4、6、8。因此,我使用explode将字符串生成一个数组,以便字符串中的每个ID都是唯一的

$product_id=分解',',$product_id

所以我所有的值都被表示出来了,我可以从主页上成功地获取它们。但我不知道如何使购物车本身正常工作。类别本身在添加到购物车后应该保持静态,除非它从购物车中删除-只有类别中的唯一ID应该更改。如果用户选择数量2,但随后决定选择数量4,我需要购物车在一个类别下添加或减去适当的ID,而不添加新类别。只有当用户从另一个类别中选择数量时,才应添加新类别。有人知道我怎样才能完成我想做的事情吗

编辑:让我粘贴购物车代码,但对我要温柔,因为这是我第一次尝试。这就是我试图做的,但它没有按照我希望的方式工作。注意,我定义了很多变量,因为我测试了很多选项。我不一定都需要

`<?php  
 session_start();
 include_once("config.php");

 //empty cart by distroying current session
 if(isset($_GET["emptycart"]) && $_GET["emptycart"]==1) {
     $return_url = base64_decode($_GET["return_url"]); //return url
     session_destroy();
      header('Location:'.$return_url);
  }

 //add item in cart
 if(isset($_POST["type"]) && $_POST["type"]=='add') {
     $product_name = $_POST["product_name"];
     $product_qty = $_POST["product_qty"];
     $return_url = base64_decode($_POST["return_url"]); //return url
     $product_id = $_POST["product_id"];
     $product_ids = explode(',', $product_id);
     $product_select = implode(',', array_slice($product_ids, 0, $product_qty));
     $product_final = explode(',', $product_select);

     foreach ($product_final as $id) {
         $results = $mysqli->query("SELECT * FROM products WHERE id = '$id'");
     }
     $obj = $results->fetch_object();
     if ($results) {
         $new_product = array(array('name'=>$product_name, 'code'=>$id, 'qty'=>$product_qty));
         if(isset($_SESSION["products"])) {
             $found = false;
             foreach ($_SESSION["products"] as $cart_itm) {
                 if ($cart_itm["code"] == $id) {
                     $product[] = array('name'=>$cart_itm["name"], 'code'=>$cart_itm["code"], 'qty'=>$product_qty);
                     $found = true;
                 }
                 else {
                     $product[] = array('name'=>$cart_itm["name"], 'code'=>$cart_itm["code"], 'qty'=>$cart_itm["qty"]);
                 }
             }
             if($found == false) {
                 $_SESSION["products"] = array_merge($product, $new_product);
             }
             else {
                 $_SESSION["products"] = $product;
             }
         }
         else {
             $_SESSION["products"] = $new_product;
         }
     }
     header('Location:'.$return_url);
 }
 if(isset($_GET["removep"]) && isset($_GET["return_url"]) && isset($_SESSION["products"])) {
     $id = $_GET["removep"];
     $return_url = base64_decode($_GET["return_url"]);
     foreach ($_SESSION["products"] as $cart_itm) {
         if($cart_itm["code"]!=$id) {
            $product[] = array('name'=>$cart_itm["name"], 'code'=>$cart_itm["code"], 'qty'=>$cart_itm["qty"]);
         }
         $_SESSION["products"] = $product;
     }
     header('Location:'.$return_url);
 }
 ?>`
另一编辑:

从新定义的数组中取出$product\U select字符串的版本。购物车现在按我想要的方式运行,但是……我如何将$product\u select字符串传递到下一页

`<?php  
 session_start();
 include_once("config.php");

 //empty cart by distroying current session
 if(isset($_GET["emptycart"]) && $_GET["emptycart"]==1) {
     $return_url = base64_decode($_GET["return_url"]); //return url
     session_destroy();
      header('Location:'.$return_url);
  }

 //add item in cart
 if(isset($_POST["type"]) && $_POST["type"]=='add') {
     $product_name = $_POST["product_name"];
     $product_qty = $_POST["product_qty"];
     $return_url = base64_decode($_POST["return_url"]); //return url
     $product_id = $_POST["product_id"];
     $product_ids = explode(',', $product_id);
     $product_select = implode(',', array_slice($product_ids, 0, $product_qty));

     $results = $mysqli->query("SELECT * FROM products WHERE id = '$product_select'");

     if ($results) {
         $new_product = array(array('name'=>$product_name, 'qty'=>$product_qty));
         if(isset($_SESSION["products"])) {
             $found = false;
             foreach ($_SESSION["products"] as $cart_itm) {
                 if ($cart_itm["name"] == $product_name) {
                     $product[] = array('name'=>$cart_itm["name"], 'qty'=>$product_qty);
                     $found = true;
                 }
                 else {
                     $product[] = array('name'=>$cart_itm["name"], 'qty'=>$cart_itm["qty"]);
                 }
             }
             if($found == false) {
                 $_SESSION["products"] = array_merge($product, $new_product);
             }
             else {
                 $_SESSION["products"] = $product;
             }
         }
         else {
             $_SESSION["products"] = $new_product;
         }
     }
     header('Location:'.$return_url);
 }
 if(isset($_GET["removep"]) && isset($_GET["return_url"]) && isset($_SESSION["products"])) {
     $product_name = $_GET["removep"];
     $return_url = base64_decode($_GET["return_url"]);
     foreach ($_SESSION["products"] as $cart_itm) {
         if($cart_itm["name"]!=$product_name) {
            $product[] = array('name'=>$cart_itm["name"], 'qty'=>$cart_itm["qty"]);
         }
         $_SESSION["products"] = $product;
     }
     header('Location:'.$return_url);
 }
 ?>`
$product_ID现在应为:

array(
    [0] => 2
    [1] => 4
    [2] => 6
    [3] => 8
)
从生成的数组中获取一个切片:

$grab_ids = array_slice( $product_ids, 0, $product_qty );
// starting with index 0 take $product_qty
$grab_id现在应该是

array(
    [0] => 2
    [1] => 4
    [2] => 6
)
第一个参数是数组,第二个参数是从0-3开始的关键索引,第三个参数是取1-4的数量

您可以执行其他操作:

echo implode( ',', $grab_ids );
// would output as: 2,4,6

我终于明白了。因此,我甚至不需要传递唯一id。相反,我从等式中删除了product_id,在我的最终结果中,使用基于物品数量的限制。因为数量是一个字符串,所以我将字符串转换为int,这允许我在查询中使用数量作为变量。这给了我需要的结果。谢谢大家的帮助

我不确定这对我所说的购物车功能有何帮助。我需要粘贴我的代码来帮助解释我的问题吗?在你分解一个字符串之后,你有一个数组——在你的例子中是一个ID数组。您似乎在问如何根据数量选择这些ID。查看我的修订版,添加了更多细节,包括从零索引开始的更正。我明白了-因此您可以在最终结果中使用字符串值定义每个数量。这更有道理。让我看看我是否能让它工作,但不确定我是否理解购物车的逻辑,足以让它工作。我已经编辑了我的主要帖子,以显示我的购物车代码是什么样子的。只有当这是你想要的时候,它才更有意义。我只是建议,如果yopu愿意,可以将数组重新转换为字符串。如果希望product_final成为数组,则不需要将数组_切片内爆,然后再次将其分解。array\u slice返回一个数组。explode从一个字符串返回一个数组,implode从一个数组返回一个字符串,您只需执行:$product\U final=array\U slice$product\U ids,0,$product\U qty;再说一次,变量是存在的,因为我在试验。我遇到的问题是,每当id是一个字符串时,我最终都会为每个字符串添加一个唯一的购物车。例如,字符串2,4,6,8是一个购物车项目/类别,然后字符串2,4成为另一个单独的项目/类别。我需要购物车的功能,如果你改变数量,你不会在购物车中得到一个全新的项目/类别…如果这有意义的话。我可以用我想要的方式使购物车功能的一种方法是从新定义的数组中删除产品id-它按照预期的方式工作,但是我如何将产品id传递到下一页?我对主要帖子进行了编辑,以显示代码,而不在新定义的数组中显示product_id。那么,如果您的客户单击“添加到购物车”以获得10.000个数量,您会将10.000个相同的id写入堆栈吗?我能用SQL查询中的LIMIT实现我想要实现的吗?是否有办法传递每种美食的每种数量 gory转到最后一页,并将其插入限制值?
echo implode( ',', $grab_ids );
// would output as: 2,4,6