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

登录用户更新Tempahan表数据时,同user_id关联的所有记录被同时更新的异常问题求助

问题排查与解决

这个问题的核心原因很明确:你的更新SQL语句只通过user_id过滤记录,而同一个用户的user_id会关联多条tempahan表的记录,执行这条SQL时自然会把所有属于该用户的预订记录全部修改,而非你目标的那一条。

修复步骤:

  1. 传递目标记录的主键ID
    你需要在编辑表单里添加一个隐藏字段,把要修改的那条记录的tempahan_id(也就是表的主键)传递到后端。比如在显示预订列表的编辑按钮对应的表单里:

    <!-- 假设$row是从数据库取出的当前记录数据 -->
    <input type="hidden" name="tempahan_id" value="<?php echo $row['tempahan_id']; ?>">
    

    这样提交更新请求时,$_POST里就会包含这条记录的唯一标识。

  2. 修改SQL的WHERE条件
    更新语句需要同时用tempahan_id(定位唯一记录)和user_id(防止用户越权修改他人记录)作为过滤条件:

    // 先获取表单传递的目标记录ID
    $tempahan_id = $_POST["tempahan_id"];
    // 修正后的SQL
    $sql = "UPDATE TEMPAHAN SET noPhone = '$noPhone', alamat = '$alamat', daerah = '$daerah', negeri = '$negeri', poskod = '$poskod', tajuk = '$tajuk', anjuran = '$anjuran' , tarikh = '$tarikh', masa = '$masa' WHERE tempahan_id = '$tempahan_id' AND user_id = '$user_id'";
    
  3. 紧急修复:解决SQL注入风险
    你现在直接把用户输入拼进SQL的写法存在严重的SQL注入漏洞,哪怕是临时用mysqli,也必须改用预处理语句:

    // 预处理语句示例(更安全)
    $stmt = $conn->prepare("UPDATE TEMPAHAN SET noPhone = ?, alamat = ?, daerah = ?, negeri = ?, poskod = ?, tajuk = ?, anjuran = ?, tarikh = ?, masa = ? WHERE tempahan_id = ? AND user_id = ?");
    // 绑定参数:"sssssssssis"对应参数类型,s=字符串,i=整数
    $stmt->bind_param("sssssssssis", $noPhone, $alamat, $daerah, $negeri, $poskod, $tajuk, $anjuran, $tarikh, $masa, $tempahan_id, $user_id);
    $stmt->execute();
    
    if($stmt->affected_rows > 0){
        echo "<meta http-equiv=\"refresh\"content=\"2;URL=senaraiTempahan.php\" />";
    } else {
        echo "Update failed";
    }
    $stmt->close();
    

额外验证建议

  • 提交表单后可以用var_dump($_POST)检查是否正确获取到了tempahan_id参数;
  • 可以对tempahan_id做简单的合法性校验(比如判断是否为正整数),避免无效参数导致的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:55:24