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

I have a form (for A) that redirects to another form (form B).

When the user is redirected to form B, the if $_POST is set, an email function is triggered. This is a problem b/c if the user reloads the page, this email is sent again.

I would like to stop sending the email if the page is realoaded.

Hence, I included a field in form A, type=hidden with value=send, and when the email (form B) is sent I unset this field, but if I reaload the page the email is sent anyway.

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

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


  }

How could I cue to the page that after the email has been sent, if page (form B) is reloaded, to skip email function?

Thank you

If you want to avoid redirects, or want to protect yourself against users that press "Back" and resubmit the form after redirect, simple solution would be to add a hidden field with a random value, generated when form if loaded. After form submit, just write this field value into session data. Then, if user submits same form data you will compare random field and what is written in the session data. If there's that value - you don't process the form data.

This is obviously done by redirecting to the same page after processing your form. So if your form is processed by script form.php, then after sending email you should do redirect:

header('location: form.php');

This is invisible for users and after reloading no $_POST values are sent again.

Once A did it's job, continue with form B, $_POST would be available.

Once B is done, execute

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

The script formConfirm.php would print the confirmation message, nothing else. Especially, it shouldn't update the DB or send email.

More general, you might implement a generic formConfirm.php, which you always use to present confirmations - e.g. somehow passing the actual confirmation message.