php
if(isset($_SESSION["basket_array"])){
foreach($_SESSION["basket_array"] as $each_item){
(mysql_query("UPDATE book SET copies=copies-1 WHERE bookid='$bookid'");
}
unset($_SESSION["basket_array"]);
header( 'Location: account.php' ) ;
}
购物车更新库存 我正在使用这个PHP代码更新我的数据库。 它在按钮点击时激活。它接受basket_array中的项目并使用$ bookid,它意味着从数据库中留下的副本中扣除1。但它只从数组中的最后一项中扣除。 例如,如果篮子中有12个项目,则从篮子中的最后一个项目中取出12个副本。 谢谢您的帮助。如果没有掌握概念,请向我询问更多信息。
会话输出$ _SESSION [“basket_array”]
array(2) {
[0]=> array(1) {
["bookid"]=> string(1) "1"
}
[1]=> array(1)
{ ["bookid"]=> string(1) "6"
}
}
答案 0 :(得分:1)
foreach($_SESSION["basket_array"] as $each_item){
(mysql_query("UPDATE book SET copies=copies-1 WHERE bookid='$bookid'");
}
您没有在查询中设置$bookid
,因此每次查询运行时,它都会更新同一行。你需要在迭代循环时改变它:
foreach($_SESSION["basket_array"] as $each_item){
$bookid = $each_item['bookid'];
(mysql_query("UPDATE book SET copies=copies-1 WHERE bookid='$bookid'");
}
您可能需要考虑的其他一些事项 - 您没有检查您的查询是否真的有效,所以如果连接出现问题,您将永远不会知道它。
您可能还想查看切换到PDO或mysqli_函数。他们都让你使用准备好的陈述。它们将帮助您编写更安全的代码,在这种情况下,您在循环中多次运行相同的语句,他们也会更有效地执行它。