PHP 停止评论保留使用 $_POST 发布自己


PHP stop comment from keeping to post itself using $_POST

所以,我正在研究一个注释脚本。 当您发表评论时,它工作正常,但我发现当您刷新页面时,即使文本字段为空,它仍然会发布相同的评论。 我知道这是因为我已经将变量发送到$_POST,它只是将该值插入到数据库中,但是如何避免此问题?提前感谢,这是我的代码:(假设已经设置了$username$image

if (isset($_POST['text']) && !empty($_POST['text']))
        {
            $text = $_POST['text'];
            $timeStamp = time();
            mysql_query("INSERT INTO comments VALUES ('$image','$username','$text','$timeStamp')");
        }

和 HTML:

        <form method = "post" action = "/view.php?image=$image" />
            <input type = "text" name = "text" maxlength = "100" />
            <input type = "submit" value = "Add Comment" />
        </form>

避免这种情况的最简单方法是在数据库操作成功后重定向:

...
mysql_query("INSERT INTO comments VALUES ('$image','$username','$text','$timeStamp')");
// error handling
header('Location: /some/where');

除此之外,您确实需要切换到PDO/预准备语句以避免SQL注入问题。

您是否在查看评论的同一页面上发帖?如果是这样,您可能会发布到/a_page_where_i_submit_things.php然后重定向回评论所在的页面。我相信这是行得通的。

简单的方法:

保存到数据库后,重新加载页面:

header('Location: comment-form.php');

这将使浏览器"忘记"表单提交。

正确的方法:

生成一个随机数并将其作为隐藏输入添加到表单中。提交表单后,请确保$_POST['nonce']与脚本中的$nonce匹配。

如何创建和使用随机数