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

PHP论坛页面刷新时评论区帖子重复提交问题求助

问题根源
  • 表单提交逻辑未做限制:写入评论的代码没放在提交判断里,只要页面加载(包括刷新)且POST参数存在,就会重复写入评论。
  • 未采用PRG模式:提交后直接输出内容,刷新时浏览器会重复发送POST请求,导致重复提交。
  • 文件读取有长度限制:fread($old,1024)只读取1024字节,评论内容较多时会丢失部分内容。
修复方案

1. 修正PHP处理逻辑

把写入文件的代码放到提交判断内,同时用重定向避免重复提交:

<?php
if(isset($_POST['Submit'])){
    $Topic = $_POST['Topic'];
    $Name = $_POST['Name'];
    $Comment = $_POST['Comment'];

    // 读取全部旧评论,无需限制字节数
    $old_comments = file_get_contents("comments.txt") ?: "";

    // 拼接新评论,修正原代码里多余的</b>标签
    $new_comment = "<b>{$Topic}</b><br>{$Name}<br>{$Comment}<br><br>";
    $string = $new_comment . $old_comments;

    // 写入文件
    file_put_contents("comments.txt", $string);

    // 重定向到当前页面,刷新时就不会重复提交了
    header("Location: " . $_SERVER['PHP_SELF']);
    exit;
}

// 读取并显示评论
$comments = file_get_contents("comments.txt") ?: "暂无评论";
?>

2. 修复混乱的HTML结构

原代码存在重复的<html>标签,修正后结构更清晰合法:

<!DOCTYPE html>
<html>
<body>
    <center>
        <form action="" method="POST">
            <label> Topic: 
                <input type="text" name="Topic" class="Input" style="width: 300px" required>
            </label>
            <br><br>
            <label> Name: 
                <input type="text" name="Name" class="Input" style="width: 225px" required>
            </label>
            <br><br>
            <label> Comment: <br>
                <textarea name="Comment" class="Input" style="width: 300px" required></textarea>
            </label>
            <br><br>
            <input type="Submit" name="Submit" value="Submit" class="Submit">
        </form>
    </center>
    <hr>
    <br><br>

    <center>
        <h3>Comments</h3>
        <hr>
        <?php echo $comments; ?>
    </center>
</body>
</html>

关键改进点

  • PRG模式:提交后重定向,浏览器会发送GET请求,刷新时不会重复提交表单。
  • 简化文件操作:用file_get_contents和file_put_contents替代复杂的fopen系列函数,能读取完整文件内容,避免字节限制问题。
  • 修复HTML错误:移除多余的<html>标签,保证页面结构合法。

内容的提问来源于stack exchange,提问作者possessor of 67 IQ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:05:21