php - 仅基于 ID 限制添加到购物车的商品数量,即使键具有 ID 和连接值
问题描述
客户在将商品添加到购物车时可以选择商店。即使一个产品可能与多个出口相关联,该产品也只有 1 个 ID。如果用户要将相同的产品添加到购物车,但选择 3 个单独的分支,则它只会在购物车中添加 1 行,数量为 3。这不是它应该如何工作的,所以我将我的 ID 与出口 ID 连接起来这样即使是同一产品,购物车中也会出现 3 个单独的项目。这很好用,但是当库存不足时,我的问题就出现了。
假设库存只有 1 件。如果我将它添加到购物车并选择一个特定的出口,它就会添加到购物车中。如果您再次执行此操作并选择另一个分支,则不应将其添加到购物车中,因为手头只有一个。然而,它让我为每个选择的不同分支添加 1。无论我尝试选择多少个不同的网点,它都应该只让我加 1。
$key = "{$prod_id}.{$outlet_id}";
if (empty($_SESSION['cart_array'][$key])) {
$_SESSION['cart_array'][$key] = array(
'prod_id' => $prod_id,
'outlet_id' => $outlet_id,
'quantity' => $quantity,
'prod_name' => $data['prod_name'],
'sale_price' => $data['sale_price'],
'sp_name' => $data['sp_name'],
'outlet_name' => $data['outlet_name']
);
$response['success'] = true;
$response['message'] = 'Product added to cart.';
}
elseif($_SESSION['cart_array'][$key]['quantity'] >= $data['numVouchersLeft']) {
$response['success'] = false;
$response['message'] = 'Insufficient stock. Cannot add to cart.';
} else {
$_SESSION['cart_array'][$key]['quantity'] += $quantity;
$response['success'] = true;
$response['message'] = 'Product added to cart.';
}
这也许是需要改变的路线?
elseif($_SESSION['cart_array'][$key]['quantity'] >= $data['numVouchersLeft']) {
更新:
我试过这个,但由于某种原因,如果我从 2 个不同的商店添加相同的产品,$_SESSION['cart_array_products] 的数量会回到 1
$key = "{$prod_id}.{$outlet_id}";
$keytwo = $prod_id;
if (empty($_SESSION['cart_array'][$key])) {
$_SESSION['cart_array'][$key] = array(
'prod_id' => $prod_id,
'outlet_id' => $outlet_id,
'quantity' => $quantity,
'prod_name' => $data['prod_name'],
'sale_price' => $data['sale_price'],
'sp_name' => $data['sp_name'],
'outlet_name' => $data['outlet_name']
);
$_SESSION['cart_array_products'][$keytwo] = array(
'prod_id' => $prod_id,
'quantity2' => $quantity
);
$response['success'] = true;
$response['message'] = 'Product added to cart.';
}
elseif($_SESSION['cart_array'][$key]['quantity'] >= $data['numVouchersLeft'] || $_SESSION['cart_array_products'][$keytwo]['quantity2'] >= $data['numVouchersLeft']) {
$response['success'] = false;
$response['message'] = 'Insufficient stock. Cannot add to cart.';
} else {
$_SESSION['cart_array'][$key]['quantity'] += $quantity;
$_SESSION['cart_array_products'][$keytwo]['quantity2'] += $quantity;
$response['success'] = true;
$response['message'] = 'Product added to cart.';
}
解决方案
我设法像这样解决它,但如果有人有更好或更优雅的方法,请告诉我:
if(empty($_SESSION['cart_array'][$key])) {
$_SESSION['cart_array'][$key] = array(
'prod_id' => $prod_id,
'outlet_id' => $outlet_id,
'quantity' => $quantity,
'prod_name' => $data['prod_name'],
'sale_price' => $data['sale_price'],
'sp_name' => $data['sp_name'],
'outlet_name' => $data['outlet_name']
);
} elseif($_SESSION['cart_array_products'][$keytwo]['quantity'] < $data['numVouchersLeft']) {
$_SESSION['cart_array'][$key]['quantity'] += $quantity;
$response['success'] = true;
$response['message'] = 'Product added to cart.';
} else {
$response['success'] = false;
$response['message'] = 'Not enough stock to add item to cart.';
}
if(empty($_SESSION['cart_array_products'][$keytwo])) {
$_SESSION['cart_array_products'][$keytwo] = array(
'prod_id' => $prod_id,
'quantity' => $quantity
);
$response['success'] = true;
$response['message'] = 'Product added to cart.';
} elseif($_SESSION['cart_array_products'][$keytwo]['quantity'] >= $data['numVouchersLeft']) {
$response['success'] = false;
$response['message'] = 'Not enough stock to add item to cart.';
} else {
$_SESSION['cart_array_products'][$keytwo]['quantity'] += $quantity;
$response['success'] = true;
$response['message'] = 'Product added to cart.';
}
推荐阅读
- oracle-apex - Oracle APEX 中的交互式网格 - 如果我选择“全选”,则只选择 40 行
- javascript - JavaScript中的getElementsByTagName方法---不起作用
- machine-learning - Gensim LDA 提供主题 ID 的输出,但概率加起来不等于 1
- react-leaflet - react-leaflet-control - TypeError: (0 , _reactLeaflet.withLeaflet) 不是函数
- reactjs - 获取 URL 缺少 OData 查询
- c# - 找出角度差异
- c++ - arduino 压力传感器跳过旋律 C++ 中的音符
- batch-file - 最后一行加粗 - 使用批处理文件
- javascript - Mongodb聚合查询返回未定义
- python - Python“请求”仅返回“响应 [403]”