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



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

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

如果页面被重新加载,我想停止发送电子邮件。

因此,我在表单a中包含了一个字段,type=hiddenwithvalue=send,当发送电子邮件(表单B)时,我取消设置该字段,但如果我重新加载页面,无论如何都会发送电子邮件。

if(isset($_POST['emailtrigger'])){
            emailfunction();        
    unset($_POST['emailtrigger']);

  }

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

感谢

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

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

header('location: form.php');

这对用户来说是不可见的,并且在重新加载之后不会再次发送$_POST值。

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

一旦完成B,执行

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

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

更一般地说,您可以实现一个通用的formConfirm.php,它总是用来表示确认——例如,以某种方式传递实际的确认消息。

最新更新