防止将重复的项目添加到PHP中的购物车

时间:2019-04-25 21:20:47

标签: php

我正在使用会话数组将产品存储在购物车中。

如果所选产品已经在购物车中,而不是再次添加产品,我想显示一条消息,通知用户该产品已经添加。

我尝试遍历数组以找到匹配的键。我也尝试过in_array($ var1,$ var2)函数。有了这些,状态就会告诉用户他们的产品已经在购物车中,但仍会添加产品。

我最后尝试的方法是使用array_search函数检查密钥是否存在,但是无论如何产品仍会添加到购物车中。

if(isset($_GET['productID']) && $_GET['productID'] != "") {
    $product = $_GET['productID'];

    $product = (string)$product;

    $result_product = GetSpecificProduct($product);

    if(!empty($result_product)) {
       $cart_array[$result_product['ProductID']] = array(
          'ProductID'=>$result_product['ProductID'],
          'ProductName'=>$result_product['ProductName'],
          'Price'=>$result_product['Price'],
          'Specifications'=>$result_product['Specifications'],
          'CO'=>$result_product['CO'],
          'CatID'=>$result_product['CatID'],
          'Name'=>$result_product['Name'],
          'Quantity'=>1
       );

     }

    if(empty($_SESSION['tocoto_cart'])){
       $_SESSION['tocoto_cart'] = $cart_array;
       $status = $result_product['ProductName']." added to your cart.";

    }else if(!empty($_SESSION['tocoto_cart'])) {

      $key = array_search($result_product['ProductID'],$_SESSION['tocoto_cart']);

      if($key !== false) {
         $status = "Selected product is already in your cart.";
      } else {
         $status = $result_product['ProductName'] . " added to your cart.";
         $_SESSION['tocoto_cart'] = array_merge($_SESSION['tocoto_cart'],$cart_array );
}

2 个答案:

答案 0 :(得分:1)

尝试做这样的事情

$array = $_SESSION['tocoto_cart'];

$key = array_search($result_product['ProductID'], array_column($array, 'ProductID')); 

if($key !== false) {
    $status = "Selected product is already in your cart.";
} else {
    $status = $result_product['ProductName'] . " added to your cart.";
    $_SESSION['tocoto_cart'] = array_merge( $_SESSION['tocoto_cart'], $cart_array );
}

答案 1 :(得分:0)

在会话中存储购物车项目的错误方法,因为当服务器(或php-fpm / apache进程)重新启动时,所有购物车都将与会话一起清除。

将购物车项目存储在数据库中,并确保该项目在单个购物车中是唯一的,请结合使用user_token SQL对cart_iditem_idON DUPLICATE KEY UPDATE quantity = quantity + 1的组合唯一约束

如果这对您来说太复杂了,请尝试修改这段代码

$key = array_search($result_product['ProductID'],$_SESSION['tocoto_cart']);
if($key !== false) {

if (array_key_exists($result_product['ProductID'],$_SESSION['tocoto_cart'])) {
   $_SESSION['tocoto_cart'][$result_product['ProductID']]['Quantity'] += 1;
}