PHP / MySQLI
$query = $conn->query(
"SELECT
cart.cart_id,
cart.user_ip,
cart.cart_amount,
cart.fk_product_id,
products.product_id,
products.prod_amount
FROM
cart
INNER JOIN
products
ON
cart.fk_product_id = products.product_id
WHERE
fk_product_id = '{$productID}' AND user_ip = '{$ip}'
");
$item = $query->fetch_assoc():
$FKproductID = $item['fk_product_id'];
$FKproductID = iSQLsecure($objConnection, $FKproductID);
$FKproductID = trim($FKproductID);
$CartAmount = $item['cart_amount'];
$CartAmount = iSQLsecure($objConnection, $CartAmount);
$CartAmount = trim($CartAmount);
$ProductAmount = $item['prod_amount'];
$ProductAmount = iSQLsecure($objConnection, $ProductAmount);
$ProductAmount = trim($ProductAmount);
$one = 1;
$add_amount = $CartAmount + $one;
$remove_amount = $ProductAmount - $one;
if($FKproductID == $productsID) {
$update_cart_item = $objConnection->query("UPDATE cart SET cart_amount = '{$add_amount}' WHERE fk_product_id = '{$productID}' AND user_ip = '{$ip}'");
$update_product_amount = $objConnection->query("UPDATE products SET prod_amount = '{$remove_amount}' WHERE product_id = '{$productID}'");
} else {
$add_item = $objConnection->query("INSERT INTO cart (user_ip, add_amount, fk_product_id) VALUES ('{$ip}', '{$add_amount}', '{$productID}')");
$update_product_amount = $objConnection->query("UPDATE products SET prod_amount = '{$remove_amount}' WHERE product_id = '{$productID}'");
}
$objConnection->close();
我的问题
$update_product_amount = $objConnection->query("UPDATE products SET prod_amount = '{$remove_ProductAmount}' WHERE product_id = '{$productID}'");
我使用这两个地方if($FKproductID == $productsID) { /*HERE1*/ } else { /*AND HERE2*/}
出于某种原因,它适用于" HERE1 "但不是" HERE2 "?
如果项目不在购物车中
它会将其插入我的购物车"数据库和更新"产品"金额价值。它应该从当前产品数量中删除 1 (10变为9)。相反,它将10变为-1。
如果商品在购物车中
它完美更新并将10变为9.代码完全相同但得到两个不同的结果?
答案 0 :(得分:0)
我假设上面的代码不完整,因为某些变量名称不一致($remove_amount
vs $remove_ProductAmount
),但在某些情况下你的代码运行正常。
对于查询,为什么不在更新查询中减去金额?像
这样的东西UPDATE table SET field = field - 1 WHERE x = y
即使数字1
是动态的,在变量上生成数字然后将其转换为整数也更安全。在最坏的情况下,它将被转换为零(可以在if()
上轻松添加,作为额外验证)。
我还建议使用调试器。如果您不想在设置XDebug时遇到麻烦,那么像或Kint这样的东西就足够了。
答案 1 :(得分:0)
我认为问题可能出在您的INNER JOIN
上。据我所知,如果项目不在您的购物车中,那么cart.fk_product_id
将不存在,因此查询将返回一个空对象。
如果您关闭了错误显示(可能在php.ini
中display_errors = Off
),则在方程式中,不存在的数组键将被视为空。
当需要执行方程式时,php会将null
转换为integer(0)
,如果if语句失败,则会导致0 - 1 = -1
。
您是否尝试输出查询的返回对象?您可以使用以下方法执行此操作:
echo "<pre>"; print_r($item); echo "</pre>";
(&lt; pre&gt;标记使其更具可读性。)
另外,如果您log_errors
已开启,请检查httpd / apache错误日志的状态。