Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将相同产品添加到购物篮后更新数量_Php_Shopping Cart_Product Quantity - Fatal编程技术网

Php 将相同产品添加到购物篮后更新数量

Php 将相同产品添加到购物篮后更新数量,php,shopping-cart,product-quantity,Php,Shopping Cart,Product Quantity,我不知道如何通过再次添加来更新购物篮中已经存在的产品的数量。如果数量为1,添加数量为3的相同产品后,篮子中应显示4。目前我所能做的就是用新的数量替换增加的数量,或者在篮子表中插入一个空元素,而不包含任何产品细节 <?php // Products are added to the basket if (!isset($_SESSION['basket'])) { $_SESSION['basket'] = array(); } if ($_SERVER['REQUEST_METHOD

我不知道如何通过再次添加来更新购物篮中已经存在的产品的数量。如果数量为1,添加数量为3的相同产品后,篮子中应显示4。目前我所能做的就是用新的数量替换增加的数量,或者在篮子表中插入一个空元素,而不包含任何产品细节

<?php
// Products are added to the basket
if (!isset($_SESSION['basket'])) {
  $_SESSION['basket'] = array();
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  if (isset($_POST['id'])) {
    $_SESSION['basket'][$_POST['id']] = array(
    'product_id'=>($_POST['id']),
    'product_photo'=>($_POST['hidden_photo']),
    'product_photo_alt'=>($_POST['hidden_photo_alt']),
    'product_name'=>($_POST['hidden_name']),
    'product_price'=>($_POST['hidden_price']),
    'product_quantity'=>($_POST['quantity'])
    );
  }
}

// This is the code with which I can only insert an empty element in the basket table with no product details.
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (isset($_POST['id']) && isset($_POST['quantity'])) {
    foreach ($_SESSION['basket'][$_POST['id']] as $item) {
        if ($_item['product_id'] === $_SESSION['basket']['product_id']) {
          $_SESSION['basket']['product_quantity'] += $item['product_quantity']; 
        } 
    }    
  }   
}

// If I apply below code it just replaces the quantity:
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (isset($_POST['id']) && isset($_POST['quantity'])) {
    foreach ($_SESSION['basket'] as $item) {
        if ($_item['product_id'] === [$_POST['id']]) {
          $item['product_quantity'] += $_POST['quantity']; 
        } 
    }    
  }   
}
?>
似乎
$item['product\u quantity']
$\u POST['quantity']
是相同的,因此数量会翻倍。 我想我需要首先检查数组
$\u POST['quantity']
中是否存在
$\u SESSION['basket']
,如果存在,则将其存储在变量中,然后执行
$item['product\u quantity']+=$stored\u quantity
,但这会再次覆盖数量。代码如下:

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (isset($_POST['do_it']) && $_POST['do_it'] == 'quantity_again') {
    foreach ($_SESSION['basket'] as $item) {
      if (in_array($_POST['quantity'], $_SESSION['basket'])) {
        $stored_qty = $_POST['quantity']; 
          if ($item['product_id'] === $_POST['id']) {
            $item['product_quantity'] += $stored_qty;
          } 
      }  
    }
  }   
}

功劳归于

尽管如此,我不确定我是否理解
$is\u available
在代码中的实际作用,以及它如何表示添加相同产品时增加数量

功劳归于


尽管如此,我不确定我是否理解
$is\u available
在代码中的实际作用,以及它如何表示添加相同产品时增加数量

在最后一段代码中,你能为每个循环将
var\u dump()
$item
放在里面并发布你得到的吗?我在foreach循环中做了
var\u dump($item)
,但没有结果,什么都没有。这很奇怪。。。它应该显示篮子中先前添加的项目。在最后一块代码中,你能为每个循环将
var\u dump()
项目
$item
放在里面并发布你得到的东西吗?我在foreach循环中做了
var\u dump($item)
,但没有结果,一点也没有。这很奇怪。。。它应该显示篮子中先前添加的项目。
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (isset($_POST['do_it']) && $_POST['do_it'] == 'quantity_again') {
    foreach ($_SESSION['basket'] as &$item) {
        if ($item['product_id'] === $_POST['id']) {
          $item['product_quantity'] += $_POST['quantity'];
        } 
    }    
  }   
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (isset($_POST['do_it']) && $_POST['do_it'] == 'quantity_again') {
    foreach ($_SESSION['basket'] as $item) {
      if (in_array($_POST['quantity'], $_SESSION['basket'])) {
        $stored_qty = $_POST['quantity']; 
          if ($item['product_id'] === $_POST['id']) {
            $item['product_quantity'] += $stored_qty;
          } 
      }  
    }
  }   
}

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (isset($_POST['do_it']) && $_POST['do_it'] == 'change') {
    if (isset($_SESSION['basket'])) {
      $is_available = 0;
        foreach ($_SESSION['basket'] as $keys => $values) {
          if ($_SESSION['basket'][$keys]['product_id'] == $_POST['id']) {
            $is_available++;
            $_SESSION['basket'][$keys]['product_quantity'] +=  $_POST['quantity'];
          } 
        } 
    }

    if ($is_available == 0) {
      if (!isset($_SESSION['basket'])) {
        $_SESSION['basket'] = array();
      }

      if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        if (isset($_POST['id'])) {
          $_SESSION['basket'][$_POST['id']] = array(
          'product_id'=>($_POST['id']),
          'product_photo'=>($_POST['hidden_photo']),
          'product_photo_alt'=>($_POST['hidden_photo_alt']),
          'product_name'=>($_POST['hidden_name']),
          'product_price'=>($_POST['hidden_price']),
          'product_quantity'=>($_POST['quantity'])
          );
        }
      }   
    }  
  }   
}