2

所以,我正在编写一个评论脚本。当您发表评论时它工作正常,但我发现当您刷新页面时,即使文本字段为空,它仍然发布相同的评论。我知道这是因为我已经将变量发送到$_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>
4

3 回答 3

2

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

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

除此之外,您确实需要切换到 PDO /prepared statements 以避免 sql 注入问题。

于 2012-05-25T00:59:34.577 回答
1

简单的方法:

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

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

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

正确的方法:

生成一个nonce并将其添加为表单中的隐藏输入。提交表单时,请确保$_POST['nonce']$nonce您的脚本匹配。

如何创建和使用随机数

于 2012-05-25T00:59:02.810 回答
1

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

于 2012-05-25T00:59:09.533 回答