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

使用PHP和HTML表单无法删除MySQL数据库记录

问题分析与解决方案

核心问题

你的删除功能失效的直接原因是:表单中的输入框和提交按钮错误使用了num属性,而PHP的$_POST数组依赖表单元素的name属性来获取提交值。这导致$_POST['deleteSubmit']和$_POST['deleteNum']始终不存在,删除逻辑根本没有触发执行。

对比你能正常运行的新增表单,新增功能的输入框和提交按钮都正确使用了name属性,这就是两者的本质区别。

修改后的删除代码

只需将表单中的num属性替换为name属性即可修复:

<?php 

    if (isset($_POST['deleteSubmit'])) { 

        $details = $conn->real_escape_string($_POST['deleteNum']); 

        $deleteSQL = "DELETE FROM userName WHERE id = '$details'"; 

        $result = $conn->query($deleteSQL); 

        if (!$result) { 
            echo 'Error!';
            exit($conn->error); 
        }  else { 
            header('Location: index.php'); 
            exit; 
        }
    }

?>

<h4>DELETE NAME (DELETE)</h4>

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
  <label for="num">Enter User Reference to be Deleted:</label><br>
  <input name="deleteNum" type="number"><br>
  <input name="deleteSubmit" type="submit" value="Delete">
</form> 

额外安全优化建议

虽然real_escape_string能降低SQL注入风险,但更可靠的方案是使用预处理语句,彻底避免将用户输入直接拼接到SQL语句中,示例如下:

if (isset($_POST['deleteSubmit'])) { 
    // 初始化预处理语句
    $stmt = $conn->prepare("DELETE FROM userName WHERE id = ?");
    // 绑定参数:"i"表示参数为整数类型(对应id字段的自增整数类型)
    $stmt->bind_param("i", $_POST['deleteNum']);
    $stmt->execute();

    // 判断是否成功删除记录
    if ($stmt->affected_rows === 0) {
        echo '未找到对应ID的记录!';
    } else {
        header('Location: index.php'); 
        exit; 
    }
    $stmt->close();
}

这种方式不仅能彻底规避SQL注入,还能通过affected_rows判断操作结果,提升交互反馈的准确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:25:24