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

PHP数据库UPDATE查询失效问题求助(WAMP环境)

排查你的UPDATE功能失效问题

我帮你梳理出了几个导致更新失败的关键问题,咱们一步步来修复:

1. PHP代码中的SQL语法硬伤

看你的updateDbUt.php里的UPDATE语句,有两处明显的错误:

  • pass字段赋值写成了$^pass,这里多了个不必要的^符号,应该是$pass
  • idEquipe字段直接写了字符串'idEquipe',而没有使用变量$idEquipe,这会导致更新后该字段的值变成固定的idEquipe字符串,完全不是你想要传递的数值

修正后的SQL语句应该是:

$q = "UPDATE `gestion`.`utilisateurs` SET `np` = '$np', `adr` ='$adr', `numTel` = '$ntel', `cin` = '$cin', `pass` = '$pass', `idEquipe` = '$idEquipe', `adrElectronique` = '$mail', `role` = '$role' WHERE `utilisateurs`.`id` = '$id'";

2. AJAX请求中错误使用serialize()方法

你在JS里对单个input元素调用了serialize(),这个方法是用来序列化整个表单的,单个元素调用会返回类似np=张三这样的键值对字符串,而不是单纯的字段值。你应该用val()来获取单个输入框的值。

修正后的JS函数:

function myAjaxAdd() {
$.ajax({
method:'POST',
url: 'updateDbUt.php',
data:{
action:'call',
name: $('#id').val(),
np: $('#np').val(),
adr: $('#adr').val(),
tel: $('#tel').val(),
cin: $('#cin').val(),
mail: $('#mail').val(),
idEquipe: $('#idEquipe').val(),
pass: $('#pass').val(),
role: $('#role').val(),
},
success:function(html) {
alert(html);
}
});
}

3. HTML循环中重复ID的致命问题

你在PHP循环生成表格行时,每行的隐藏input都用了相同的ID(比如id="np"、id="id"),但HTML页面里ID必须是唯一的!这会导致JS的$('#np').val()永远只能拿到第一行的对应值,根本无法正确获取当前行的更新数据。

解决办法是给每个input的ID加上当前用户的ID作为后缀,比如:

<input type="hidden" name="np" id="np_<?php echo $t['id']; ?>" value="<?php echo $np; ?>" >

同时修改myAjaxAdd()函数,让它接收当前行的用户ID参数,才能准确获取对应行的输入框值:

  • 先修改HTML里的onclick调用:
<a class="add" title="Add" data-toggle="tooltip" onclick="myAjaxAdd(<?php echo $t['id']; ?>)">
<i class="material-icons">&#xE03B;</i>
</a>
  • 再更新JS函数:
function myAjaxAdd(userId) {
$.ajax({
method:'POST',
url: 'updateDbUt.php',
data:{
action:'call',
name: $('#id_'+userId).val(),
np: $('#np_'+userId).val(),
adr: $('#adr_'+userId).val(),
tel: $('#tel_'+userId).val(),
cin: $('#cin_'+userId).val(),
mail: $('#mail_'+userId).val(),
idEquipe: $('#idEquipe_'+userId).val(),
pass: $('#pass_'+userId).val(),
role: $('#role_'+userId).val(),
},
success:function(html) {
alert(html);
}
});
}

额外提醒:SQL注入风险

你现在的代码直接把POST参数拼接到SQL语句里,存在严重的SQL注入风险!建议使用预处理语句来执行数据库操作,比如:

$stmt = $conn->prepare("UPDATE utilisateurs SET np=?, adr=?, numTel=?, cin=?, pass=?, idEquipe=?, adrElectronique=?, role=? WHERE id=?");
$stmt->bind_param("sssssissi", $np, $adr, $ntel, $cin, $pass, $idEquipe, $mail, $role, $id);
$stmt->execute();
if($stmt->affected_rows > 0) {
    echo "updated";
} else {
    die("problem updating: " . $stmt->error);
}
$stmt->close();

按照上面的步骤修改后,你的UPDATE功能应该就能正常工作了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:25:20