首页 文章

购物车数量问题

提问于
浏览
0

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

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

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

Item Category Each unique id of said Category Qty of Category Ordered

这就是我定义每件作品的方式 .

$product_name = $_POST["product_name"] - 类别

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

$product_qty = $_POST["product_qty"] - 选择的数量

$ product_id是一个字符串 . 假设我有2,4,6,8的唯一ID,因此当选择数量1时,只选择ID 2 . 如果选择数量4,则选择ID 2,4,6,8 . 因此,我使用explode将字符串转换为数组,以便字符串中的每个ID都是唯一的 .

$product_ids = explode(',', $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_select字符串的版本 . 购物车按照我现在想要的方式运行,但是......如何将$ product_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);
 }
 ?>`

2 回答

  • 0
    $product_name = $_POST["product_name"];
    
    $product_id = $_POST["product_id"];
    // let's say "2,4,6,8"
    
    $product_qty = $_POST["product_qty"];
    // let's say 3
    
    $product_ids = explode(',', $product_id);
    

    $ product_ids现在应该是:

    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_ids现在应该是

    array(
        [0] => 2
        [1] => 4
        [2] => 6
    )
    

    第一个参数是数组,第二个参数是从(0-3)开始的键索引,第三个参数是要采用的数量(1-4) .

    您可以执行其他操作:

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

    我终于想通了 . 所以我甚至不需要传递唯一的ID . 相反,我从等式中删除了product_id,在我的最终结果中,根据项目的数量使用LIMIT . 由于数量是一个字符串,我将字符串转换为int,这允许我在我的查询中使用数量作为变量 . 这给了我需要的结果 . 谢谢大家的帮助!

相关问题