【发布时间】:2017-08-01 14:31:02
【问题描述】:
当我使用包含 1 个项目 $_SESSION['cart'] 的购物车运行以下代码时,该购物车包含多个字段:id、title、qty 等。数量设置为 1,它总是将从当前库存数量中减去的数量加倍。
foreach ($_SESSION['cart'] as $result){
$insert = 'UPDATE collateral SET stock = stock - '.$result['qty'].' WHERE id = '.$result['id'];
mysql_query($insert) or die(mysql_error());
}
因此,当运行上述项目且该项目的当前库存为 400 时,结果为我留下 398。
我一生都无法弄清楚为什么会这样。任何帮助将不胜感激。
【问题讨论】:
-
也许你的代码运行不止一次...?另外,您是否验证您的会话包含什么,或者您只是假设它只是这一个条目?在循环之前执行 $_SESSION['cart'] 的 var_dump。
-
是的,我添加了带有 window.alert 标签的警报来告诉我发生了什么,我只收到一个提示 qty=1 并且循环停止的警报,但我的库存总是减少两倍数量。我会尝试使用 var_dump,但只是为了仔细检查。
-
不要使用 已弃用且不安全
mysql_*-functions。它们自 PHP 5.5(2013 年)以来已被弃用,并在 PHP 7(2015 年)中完全删除。请改用 MySQLi 或 PDO。 -
这里是 var_dump:
array(6) { ["id"]=> string(2) "73" ["qty"]=> string(1) "1" ["title"]=> string(15) "Product Summary" ["image"]=> string(34) "BCA_product_summary_2017_cover.jpg" ["category"]=> string(9) "Reference" ["type"]=> string(8) "Brochure" } -
你是如何触发这个脚本的?正如@CBroe 提到的,也许你触发了两次?
标签: php mysql session foreach insert