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

PHP从HTML表单获取邮箱并删除数据库记录的代码修正求助

问题排查与代码修正

核心问题分析

  • 变量名不匹配:PHP中获取的是$semail = $_REQUEST['semail'];,但SQL语句里误用了未定义的$email,导致SQL语法错误,若错误输出未开启则页面无内容。
  • SQL注入风险:直接拼接用户输入到SQL语句中,存在严重安全漏洞。
  • 表单未闭合:HTML的<form>标签缺少</form>闭合,可能导致表单提交异常。
  • 输入校验缺失:未判断semail是否通过POST提交,无输入时会触发未定义索引错误。
  • 错误显示未开启:PHP默认可能关闭错误输出,代码出错时无提示。

修正后的HTML表单

<html>
    <head>
        <title>Subscribe</title>
    </head>
    <body>
        <form method="post" action="delete-subs.php">
            Email:<input type="Text" id="semail" name="semail"><br>
            <input type="Submit" name="submit" value="delete">
        </form> <!-- 补充表单闭合标签 -->
    </body>
</html>

修正后的delete-subs.php

<html>
<head>
   <title>Delete subscribe</title>
</head>
<body>
    <center>
        <?php
        // 开发环境开启错误显示,生产环境需关闭
        error_reporting(E_ALL);
        ini_set('display_errors', 1);

        include 'db/config.php'; // 补充空格避免解析问题

        // 检查邮箱输入是否存在且非空
        if(isset($_POST['semail']) && !empty(trim($_POST['semail']))){
            $semail = trim($_POST['semail']);

            // 使用预处理语句防止SQL注入
            $sql = "DELETE FROM sbscribers WHERE semail = ?";
            $stmt = $conn->prepare($sql);
            $stmt->bind_param("s", $semail); // "s"表示参数为字符串类型

            if ($stmt->execute()) {
                echo "<h1 style='color: red;'>Thank you</h1><br>Successfully deleted.";
            } else {
                echo "Error: " . $stmt->error;
            }

            $stmt->close();
        } else {
            echo "请输入要删除的邮箱地址";
        }

        $conn->close();
        ?>
    </center>
</body> 
</html>

关键修改说明

  1. 统一变量名,将SQL中的$email改为$semail,匹配获取到的输入变量。
  2. 改用预处理语句绑定参数,彻底规避SQL注入风险。
  3. 补充HTML表单闭合标签,确保表单正常提交。
  4. 增加输入校验,判断邮箱是否提交且非空,避免未定义索引错误。
  5. 开启PHP错误显示,方便开发阶段排查问题。
  6. 替换$_REQUEST为$_POST,符合表单提交方法的语义,更严谨。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:20:27