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

PHP违禁词检测自定义错误提示不显示问题求助

问题解决思路及修复代码

核心问题分析

  1. 你的代码完全没写输出错误提示的逻辑——只把$boolean设为false,但没添加当验证不通过时显示那句提示的代码,所以违禁词评论提交后啥反应都没有。
  2. 之前修复时出现重复提示,大概率是你把echo $error写到了循环里,每检测到一个违禁词就输出一次,自然会重复。
  3. 另外代码存在致命SQL注入漏洞,直接把用户输入拼进SQL语句,懂技术的攻击者能直接篡改甚至删除你的数据库,这个必须修复。

修复后的完整代码

<!DOCTYPE html>
<html>
<head>
<title>Insert Page page</title>
</head>
<body>
<center>
    <?php
        // 初始化错误提示
        $error = "This is a family friendly website.";
        // 数据库连接
        $conn = mysqli_connect("localhost", "root", "", "reviewsite");
        if ($conn === false) {
            die("ERROR: Could not connect. " . mysqli_connect_error());
        }

        // 先判断是否有表单提交,避免直接访问页面报错
        if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['Rev'])) {
            $review = trim($_POST['Rev']);
            $originals = array("fuck", "damn", "ass", "shit", "instance8");
            $isValid = true;

            // 检测违禁词,找到一个就停止循环,提升效率
            foreach ($originals as $badWord) {
                if (stripos($review, $badWord) !== false) {
                    $isValid = false;
                    break;
                }
            }

            if ($isValid) {
                // 用预处理语句防止SQL注入,必须这么做
                $sql = "INSERT INTO revtable (review_content) VALUES (?)"; // 替换成你表中实际的字段名
                $stmt = mysqli_prepare($conn, $sql);
                mysqli_stmt_bind_param($stmt, "s", $review);
                if (mysqli_stmt_execute($stmt)) {
                    echo "<h3> Thank you for your review! </h3>";
                } else {
                    echo "ERROR: Could not save review. " . mysqli_error($conn);
                }
                mysqli_stmt_close($stmt);
            } else {
                // 仅在验证不通过时输出一次错误提示
                echo "<h3 style='color:red;'>$error</h3>";
            }
        }
    ?>
    <!-- 补充评论提交表单,原代码缺失用户提交入口 -->
    <form method="post" action="">
        <textarea name="Rev" rows="5" cols="50" placeholder="Enter your review..."></textarea><br>
        <input type="submit" value="Submit Review">
    </form>
</center>
</body>
</html>

关键修改点说明

  • 增加表单提交判断:只有POST请求且存在评论内容时才处理逻辑,避免直接访问页面出现Undefined index错误。
  • 违禁词检测优化:用foreach循环替代普通for循环,找到违禁词后立即break跳出,没必要继续检测剩余词汇。
  • 错误提示逻辑:把提示输出放在循环外部,仅当验证不通过时执行一次,彻底解决重复提示问题。
  • 修复SQL注入:改用预处理语句执行插入操作,彻底杜绝注入风险(注意把review_content换成你数据库表中实际存储评论的字段名)。
  • 补充提交表单:原代码没有用户提交评论的入口,补上后才能正常测试功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:50:54