PHP数据库UPDATE查询失效问题求助(WAMP环境)
排查你的UPDATE功能失效问题
我帮你梳理出了几个导致更新失败的关键问题,咱们一步步来修复:
1. PHP代码中的SQL语法硬伤
看你的updateDbUt.php里的UPDATE语句,有两处明显的错误:
pass字段赋值写成了$^pass,这里多了个不必要的^符号,应该是$passidEquipe字段直接写了字符串'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"></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
相关产品推荐
相关产品推荐

