如果页面重新加载,PHP $ _POST表单将过期

时间:2012-01-09 22:21:23

标签: php forms post

我有一个表单(用于A)重定向到另一个表单(表单B)。

当用户被重定向到表单B时,如果设置了if $ _POST,则会触发电子邮件功能。这是一个问题b / c如果用户重新加载页面,则会再次发送此电子邮件。

如果页面是真实的,我想停止发送电子邮件。

因此,我在表单A中包含了一个字段,type = hidden with value = send,当发送电子邮件(表单B)时,我取消设置此字段,但如果我自动发送该页面,则无论如何都会发送电子邮件。

if(isset($_POST['emailtrigger'])){

            emailfunction();        
    unset($_POST['emailtrigger']);


  }

我如何提示电子邮件发送后的页面,如果重新加载页面(表单B),跳过电子邮件功能?

谢谢

3 个答案:

答案 0 :(得分:3)

如果您想避免重定向,或者想要保护自己免受按下“返回”并在重定向后重新提交表单的用户,简单的解决方案是添加一个带有随机值的隐藏字段,如果已加载则生成表单。表单提交后,只需将此字段值写入会话数据。然后,如果用户提交相同的表单数据,您将比较随机字段和会话数据中写入的内容。如果有该值 - 您不处理表单数据。

答案 1 :(得分:1)

这显然是在处理完表单后重定向到同一页面。因此,如果您的表单由脚本form.php处理,那么在发送电子邮件后,您应该重定向:

header('location: form.php');

这对用户来说是不可见的,重新加载后不再发送$_POST个值。

答案 2 :(得分:1)

一旦A完成了它的工作,继续使用表格B,$_POST将可用。

完成B后,执行

header('location: formConfirm.php');
exit;

脚本formConfirm.php将打印确认消息,没有别的。特别是,它不应更新数据库或发送电子邮件。

更一般地说,您可以实施通用formConfirm.php,您始终可以使用它来提供确认 - 例如以某种方式传递实际的确认信息。