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

使用PHP+AJAX点击按钮更新数据库单条记录及实时刷新问题

解决方案

一、多按钮绑定对应数据库条目实现精准更新

1. 修正按钮HTML代码

你当前按钮用了固定id submitbtn,HTML中id必须唯一,多个按钮需改用class绑定,同时给每个按钮增加data-id属性存储对应数据库条目的ID,按钮随列表循环输出的部分代码修改如下:

<!-- 循环输出每个条目对应的按钮 -->
<button type="button" class="btn btn-success submitbtn" data-id="<?php echo $对应条目的id字段; ?>">UPDATE</button>

2. 修正jQuery绑定逻辑

改用class选择器绑定点击事件,原获取data-id的逻辑可以保留,同时增加对应徽章的状态更新逻辑:

$('.submitbtn').on('click', function(){
    var id = $(this).data('id');
    var $targetBadge = $('.updatedicon[data-id="'+id+'"]'); // 提前匹配对应条目的状态徽章
    $.ajax({
        url: 'includes/updatequery.php',
        type: 'POST',
        data: {id:id},
        success: function(data){
            if (data) {
                console.log("updated");
                // 直接更新对应徽章状态,无需刷新页面
                $targetBadge.text('completed').removeClass('badge-danger').addClass('badge-success');
            } else {
                $('#error').load("custom/static/error.html");
            }
        },
        error: function(jqXHR, textStatus, errorThrown){
            $('#error').html("oops" + errorThrown);
        }
    });
});

3. 修正更新接口PHP代码

原代码SQL语句WHERE id=id会导致全表所有数据被更新,同时没有接收前端传递的ID,还存在SQL注入风险,修改如下:

<?php
include("src/db.php");
// 接收POST传递的ID,做基础校验
$id = isset($_POST['id']) ? intval($_POST['id']) : 0;
if($id <= 0){
    echo 0;
    exit;
}
// 用预处理语句防注入,同步更新job和status字段和前端判断逻辑对应
$stmt = mysqli_prepare($conn, "UPDATE mytable SET job='completed', status='completed' WHERE id=?");
mysqli_stmt_bind_param($stmt, "i", $id);
$res = mysqli_stmt_execute($stmt);
echo $res ? 1 : 0;
?>

二、前端状态实时刷新修正

1. 修正菜单项徽章代码

原徽章用了固定id updatedicon,多个条目id重复无法定位对应元素,修改为带data-id的class:

<?php 
foreach($data as $d) {
    $id = $d['id'];
    $mystatus = $d['status'];
?>
<li class="nav-item">
    <a class="nav-link clickable blueMenuItem" id="nav-location" data-id="<?php echo $d['id']; ?>">
        <i class="nav-icon fas <?php echo $d['icon']; ?>"></i>
        <p><?php
            echo $d["title"];
            if ($d['type'] == "job") { ?>
                <!-- 改id为class,增加data-id属性匹配对应条目 -->
                <span class="right badge updatedicon <?php if($mystatus == "completed"){echo "badge-success";} else {echo "badge-danger";}?>" data-id="<?php echo $id; ?>">
                    <?php setJob($con, $id)?>
                </span><?php
            } ?>
        </p>
    </a>
</li><?php
}
?>

2. 修正setJob函数参数错误

原函数参数名是$idd,SQL语句里误用了$id导致无法查询到数据,同时增加预处理逻辑防注入:

<?php
function setJob($con, $id) { // 把参数名从$idd改成$id,和SQL语句变量对应
    $sql = "SELECT status FROM mytable WHERE id=?";
    $stmt = mysqli_prepare($con, $sql);
    mysqli_stmt_bind_param($stmt, "i", $id);
    mysqli_stmt_execute($stmt);
    $result = mysqli_stmt_get_result($stmt);
    $row = mysqli_fetch_assoc($result);
    return $row ? $row['status'] : 'not completed';
}
?>

修改后点击对应UPDATE按钮,只会更新对应ID的数据库条目,同时前端对应条目的状态徽章会自动切换为完成状态,不需要刷新整个页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:45:03