Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果页面重新加载,PHP$\u POST表单将过期_Php_Forms_Post - Fatal编程技术网

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

如果页面重新加载,PHP$\u POST表单将过期,php,forms,post,Php,Forms,Post,我有一个表单(对于a)可以重定向到另一个表单(表单B) 当用户被重定向到表单B时,如果设置了$u POST,则会触发电子邮件功能。这是一个问题b/c如果用户重新加载页面,此电子邮件将再次发送 如果页面被重新加载,我想停止发送电子邮件 因此,我在表单a中包含了一个字段,type=hidden with value=send,当发送电子邮件(表单B)时,我取消设置该字段,但如果我重新加载页面,电子邮件仍然会发送 if(isset($_POST['emailtrigger'])){

我有一个表单(对于a)可以重定向到另一个表单(表单B)

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

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

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

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

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


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


谢谢

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

header('location: form.php');

这对于用户来说是不可见的,在重新加载no
$\u POST之后,将再次发送值。

一旦A完成了它的工作,继续使用表单B,
$\u POST
将可用

B完成后,执行

header('location: formConfirm.php');
exit;
脚本
formConfirm.php
将打印确认消息,而不打印其他内容。特别是,它不应该更新数据库或发送电子邮件


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

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

这就是它们的用途……您不能这样取消设置它们,因为它们是从客户端发送的。PHP是一种服务器端语言。您可以使用PHP会话来确定页面是否已被重新发送。@DaveRandom:您看到许多本应为注释的答案,但这是一条本应为注释的注释。:)为什么你需要这样一个链式表单处理程序?我需要通过表单B页面发布$\u POST,所以我需要保持$\u POST活动。我假设您的回答是,我在form.php中去掉了$_POST,并将其重定向到form B?+1,因为使用了“显然”这个词。当我读到这个词时,实际上笑了。@ibero-有很多方法可以应用这个基本原则-重定向的想法是避免触发isset POST调用-这取决于您如何设置它。您可以使用会话来包含表单1的数据、隐藏字段等。选项很多。您甚至可以为电子邮件的发送次数设置一个会话变量,并在超过1时阻止它。您的选择。@IberoMedia所以只需在表格B中使用重定向,如下所示:
表格A->表格B->发送电子邮件->重定向到表格B
@Kai Qing我希望您能将此作为答案。最后,我实现了创建会话,在if($\u POST&&session['thevariable']!=1'){email…$\u session['thevariable']=1;}内设置会话变量。谢谢。我实现了创建会话,在if($\u POST&&session['thevariable']!=1'){email…$\u session['thevariable']=1;}内设置会话变量重新加载页面时,$\u会话['thevariable']==1,因此不会触发电子邮件。谢谢