我有一个表单(用于A)重定向到另一个表单(表单B)。
当用户被重定向到表单B时,如果设置了if $ _POST,则会触发电子邮件功能。这是一个问题b / c如果用户重新加载页面,则会再次发送此电子邮件。
如果页面是真实的,我想停止发送电子邮件。
因此,我在表单A中包含了一个字段,type = hidden with value = send,当发送电子邮件(表单B)时,我取消设置此字段,但如果我自动发送该页面,则无论如何都会发送电子邮件。
if(isset($_POST['emailtrigger'])){
emailfunction();
unset($_POST['emailtrigger']);
}
我如何提示电子邮件发送后的页面,如果重新加载页面(表单B),跳过电子邮件功能?
谢谢
答案 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
,您始终可以使用它来提供确认 - 例如以某种方式传递实际的确认信息。