php一行多商品,php - 更新购物车中商品的数据库是将两个商品添加到一行中 - SO中文参考 - www.soinside.com...

当我处理我的购物车有两个项目。数据库使用新的可用数量更新每个项目大小,但似乎购物车中有多个项目,然后第二个/第三个/第四个项目大小使用新的可用数量更新,但第一个项目选择其他项目数量并将它们添加到尺寸细节和更新项目自己的尺寸详细信息。

我在订单确认页面中调整了库存明细

//调整库存

$itemQ = $db->query("SELECT * FROM cart WHERE id = '{$cart_id}'");

$iresults = mysqli_fetch_assoc($itemQ);

$items = json_decode($iresults['items'],true);

foreach($items as $item){

$newsizes = array();

$item_id = $item['id'];

$productQ = $db->query("SELECT sizes FROM products WHERE id = '{$item_id}'");

$product = mysqli_fetch_assoc($productQ);

$sizes = sizesToArray($product['sizes']);

foreach($sizes as $size){

if($size['size'] == $item['size']){

$q = $size['quantity'] - $item['quantity'];

$newSizes[] = array('size' => $size['size'],'quantity' => $q);

}else{

$newSizes[] = array('size' => $size['size'],'quantity' => $size['quantity']);

}

}

$sizesString = sizesToString($newSizes);

$db->query("UPDATE products SET sizes = '{$sizesString}' WHERE id = '{$item_id}'");

}

我的函数sizeToString和sizesToArray存储在帮助文件中

function sizesToArray($string){

$sizesArray = explode(',',$string);

$returnArray = array();

foreach($sizesArray as $size){

$s = explode(':',$size);

$returnArray[] = array('size' => $s[0], 'quantity' => $s[1]);

}

return $returnArray;

}

function sizesToString($sizes){

$sizesString = '';

foreach($sizes as $size){

$sizesString .= $size['size'].':'.$size['quantity'].',';

}

$trimmed = rtrim($sizesString, ',');

return $trimmed;

}

我已经完成了我的代码,我无法看到它正在做它正在做的事情的原因。我的想法是,如果我的代码循环,那么每个项目在数据库中更新时都会遇到同样的问题,而不仅仅是第一项。

任何帮助将不胜感激。

编辑Helpers.php

function sizesToArray($string){

$sizesArray = explode(',',$string);

$returnArray = array();

foreach($sizesArray as $size){

$s = explode(':',$size);

$returnArray[] = array('size' => $s[0], 'quantity' => $s[1]);

}

return $returnArray;

}

function sizesToString($sizes){

$sizesString = '';

foreach($sizes as $size){

$sizesString .= $size['size'].':'.$size['quantity'].',';

}

$trimmed = rtrim($sizesString, ',');

return $trimmed;

}

1) - 购物车的内容在db表购物车中,项目字符串保存如下

[{"id":"247","size":"W5000W","quantity":2}]

[{"id":"242","size":"MK120","quantity":"2"}]

2) - 购物车结帐前的产品内容尺寸字符串看起来像这样

Prod id: 247

sizes: W5000W:20

Prod id: 242

sizes: MK120:20

3)结账后的预期结果:

Prod id: 247

sizes: W5000W:18

Prod id: 242

sizes: MK120:18

4)结账后的实际结果:购物车结账后尺寸字符串看起来像这样(在我订购了每件商品的两件之后)

Prod id: 247

sizes: W5000W:18, MK120:18

Prod id: 242

sizes: MK120:18

注意:先将prod id 247添加到购物车中,

编辑18/9

我有一个显示我可用数量的选择框

$string_array = explode(':', $string);

$size = $string_array['0'];

$available = $string_array['1'];

if ($available > 0){

echo ''.$size.'

('.$available.' Available)';

}

if ($available <= 0){

echo 'No more left';

}

} ?>

这在我的产品页面的底部:

jQuery('#size').change(function(){

var available = jQuery('#size option:selected').data("available");

jQuery('#available').val(available);

});

我在页脚中有这个,这是库存数量的验证。从理论上讲,我写的是有效的,但却不想在现实中发挥作用。

function add_to_cart(){

jQuery('#product_errors').html("");

var size = jQuery('#size').val();

var quantity = jQuery('#quantity').val();

var available = parseInt(jQuery('#available').val());

var error = '';

var data = jQuery('#add_product_form').serialize();

if (size == '' || quantity == '' || quantity == 0){

error += '

id="product_errors">

label="close">×

Error! You must select a size

and quantity before continuing.

';

jQuery('#product_errors').html(error);

return;

} else if (quantity > available){

error += '

id="product_errors">

label="close">×

Error! We have only

'+available+' available.

';

jQuery('#product_errors').html(error);

return;

} else{

$.ajax({

url : 'add_cart.php',

method : 'post',

data : data,

success : function(){

location.reload();

window.location.href = "basket.php";

},

error : function(){alert("Something went wrong");},

});

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值