You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

购物车加减按钮触发AJAX请求后无法同步更新PHPMyAdmin的basket表求助

问题修复方案

你当前代码存在以下核心错误导致数据库无法更新:

  • JS逻辑位置错误:AJAX请求写在点击事件外部,仅页面初始化时执行1次,点击加减按钮时不会触发数据提交
  • 变量作用域错误:$button、quantity变量都定义在点击事件回调内部,外部代码无法访问,导致提交的产品ID和数量都是无效值
  • 产品ID取值错误:ID属性绑定在数量输入框上,不是按钮本身,直接取$button.attr("id")无法获取到产品ID
  • PHP代码存在安全与逻辑缺陷:直接拼接用户参数到SQL语句有注入风险,且缺少必要的参数校验和执行结果判断

修复后的incrementing.js代码

$(function() {
    $(".numbers-row").append('<div class="inc button">+</div><div class="dec button">-</div>');
    // 所有交互逻辑都放到点击事件回调内部
    $(".button").on("click", function() {
        var $button = $(this);
        var $input = $button.parent().find("input");
        var oldValue = $input.val();
        var quantity;

        if ($button.text() == "+") {
            quantity = parseFloat(oldValue) + 1;
        } else {
            quantity = oldValue > 0 ? parseFloat(oldValue) - 1 : 0;
        }
        // 从输入框的id属性读取产品ID
        var pid = $input.attr("id");
        // 提交更新请求
        $.ajax({
            type: "POST",
            url: "basket2table.php",
            data: { pid: pid, quantity: quantity },
            success: function() {
                $input.val(quantity);
            },
            // 调试用错误回调,上线可删除
            error: function(xhr) {
                console.log('更新失败:', xhr.responseText);
            }
        });
    });
});

修复后的basket2table.php代码

<?php 
include("dbconnect.php");
// 校验参数完整性再执行更新
if(isset($_POST['quantity']) && isset($_POST['pid'])) {
    $quantity = intval($_POST['quantity']);
    $pid = intval($_POST['pid']);
    // 用预处理语句避免SQL注入
    $stmt = $db->prepare("UPDATE Basket SET quantity = ? WHERE product_ID = ?");
    $stmt->bind_param("ii", $quantity, $pid);
    $result = $stmt->execute();
    // 可选返回执行状态方便前端调试
    echo $result ? 'success' : '更新失败:'.$db->error;
} else {
    echo '参数缺失';
}
?>

可选优化shoppingbasket.php代码

修改输入框类型、避免重复ID,提升交互合理性:

print '<div class="list_item">
        <img src="Images/' . $img . '">
            <div class="rightside">
                <a href="singlepage.php?subject=' . $product_id . '">' . $name . '</a><br>
                <p>' . $subtitle . '</p><br>
                <form class="quantity" method="POST" action="">
                    <div class="numbers-row">
                        <input type="number" min="0" id="' . $product_id . '" value="' . $quantity . '">
                    </div>
                </form>
            </div>
    </div>';

内容的提问来源于stack exchange,提问作者Olivia Atkinson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 08:45:07