如何防止重载时将数据重新发送到数据库?

时间:2016-02-29 19:00:55

标签: php html mysql

我是php的初学者。我设计了一个网页,它运行良好,但是当我 重新加载 时  我通过提交内容发布的页面,它再次将这些文本重新发送到数据库并创建相同的记录。现在的问题是如何防止这个重发数据进入我的数据库?感谢。

3 个答案:

答案 0 :(得分:1)

您可以对包含插入数据的消息的页面执行REDIRECT。 你可以使用这个头函数来做到这一点:

header('Location: http://www.example.com/');

您也可以重定向到其他查询。使用此代码:

header("Location: ?page=successfulsending");

然后你不需要if子句检查重发POST数据是否已发送。如果页面等于成功发送,则只显示成功的发送页面。

答案 1 :(得分:0)

您可以做的是使用ajax提交表单,或者在写入数据库完成后使用php中的标题函数重定向。

答案 2 :(得分:0)

假设您在表单中使用POST方法,请尝试以下方法:

if( !empty( $_POST ) )
{
   /*
     success is a boolean value which you would put in $success on form successful submission),  do a redirect
   */
   if( $success )
   {
       header( 'HTTP/1.1 303 See Other' );
       header( 'Location: http://www.example.com/index.php?message=success' );
       exit();
   }
}
// if the form submission has succeeded then only show your message
if( isset( $_GET[ 'message' ] ) && $_GET[ 'message' ] == 'success' )
{
?>
  <h2>Thank you</h2>
  <p>
  Your submission is successful.
  </p>    
<?php
}
else
{
?> 
   <!-- submission is not with post method, So show error message and so on ... -->    
<?php
}

这会告诉我们:

  • 如果提交不是POST请求,或者网址中没有附加?message=success,则会向用户显示错误消息。
  • 如果提交是POST请求,则处理表单:
    • 如果处理成功,则将用户重定向到新页面(将?message=success附加到您拥有的网址)
    • 如果在网址中有?message=success,则会向他显示一条感谢信息。
  • 如果表单处理失败,请向他显示错误消息,甚至再次显示该表单。

希望这会对你有所帮助。