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

如何用Bootstrap+Ajax基于选中ID操作MySQL并修复更新首条记录问题

问题定位与修复方案

首先咱们来揪出问题的核心原因:你在循环生成每个Bootstrap Modal的时候,所有模态框里的输入框都用了相同的id="user_id"和id="full_name"。但HTML里的id是全局唯一的,当你用$("#user_id").val()获取值时,jQuery只会找到页面中第一个匹配这个id的元素,所以不管你打开哪个模态框,拿到的都是第一条记录的ID,自然只会更新第一条数据。

接下来咱们一步步修复这个问题:

步骤1:给模态框输入框添加唯一标识

把每个模态框里的输入框id改成和当前记录ID绑定的形式,确保每个输入框的id都是独一无二的。

修改后的edit_account.php模态框部分代码:

<div class = "modal-body">
    <input type = "text" id = "user_id_<?php echo $id; ?>" value = "<?php echo $id; ?>" class = "form-control" />
    <input type = "text" id = "full_name_<?php echo $id; ?>" value = "<?php echo $fn; ?>" class = "form-control" />
</div>

步骤2:修正Ajax的取值逻辑

在点击Update按钮的事件里,要获取当前模态框对应的输入框值,而不是全局的重复id。直接用绑定了记录ID的选择器来定位输入框即可。

修改后的script部分代码:

$("#update<?php echo $id; ?>").click(function() {
    // 用当前记录ID拼接输入框的唯一id
    var id = $("#user_id_<?php echo $id; ?>").val();
    var fn = $("#full_name_<?php echo $id; ?>").val();
    
    if (confirm("Are you sure you want update this record?")) {
        $.ajax({
            url: "edit_account_process.php",
            type: "POST",
            data: { userid: id, fullname: fn },
            success: function(data) {
                $("#showData").html(data);
                // 更新成功后自动关闭模态框
                $("#edit<?php echo $id; ?>").modal('hide');
            }
        });
    }
});

步骤3:修复SQL注入风险(重要优化)

你的edit_account_process.php里直接把POST参数拼进SQL语句,存在严重的SQL注入风险。咱们用mysqli的预处理语句来修复,让代码更安全:

修改后的edit_account_process.php代码:

<?php
$cn = mysqli_connect("localhost","root","","testdb");

// 检查数据库连接是否成功
if (!$cn) {
    die("Connection failed: " . mysqli_connect_error());
}

$id = $_POST['userid'];
$fn = $_POST['fullname'];

// 使用预处理语句防止SQL注入
$sql = "UPDATE tblinfo SET fullname = ? WHERE userid = ?";
$stmt = mysqli_prepare($cn, $sql);
// "si"表示第一个参数是字符串,第二个是整数类型
mysqli_stmt_bind_param($stmt, "si", $fn, $id);

if (mysqli_stmt_execute($stmt)) {
    echo "<script>alert('Successfully updated!');</script>";
} else {
    echo "<script>alert('Unable to update the record!');</script>";
}

// 关闭预处理语句和数据库连接
mysqli_stmt_close($stmt);
mysqli_close($cn);
?>

额外优化建议:减少重复代码

可以把script部分移到循环外面,用事件委托的方式绑定点击事件,避免生成大量重复的script代码,让页面更简洁:

// 放在循环外面(比如页面底部)
$(document).on('click', '[id^="update"]', function() {
    // 从按钮id中提取记录ID
    var recordId = $(this).attr('id').replace('update', '');
    var id = $("#user_id_" + recordId).val();
    var fn = $("#full_name_" + recordId).val();
    
    if (confirm("Are you sure you want update this record?")) {
        $.ajax({
            url: "edit_account_process.php",
            type: "POST",
            data: { userid: id, fullname: fn },
            success: function(data) {
                $("#showData").html(data);
                $("#edit" + recordId).modal('hide');
            }
        });
    }
});

这样就不用在循环里重复生成每个按钮的点击事件代码了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:10:09