所以,我正在研究一个注释脚本。 当您发表评论时,它工作正常,但我发现当您刷新页面时,即使文本字段为空,它仍然会发布相同的评论。 我知道这是因为我已经将变量发送到$_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
匹配。
如何创建和使用随机数