I have a simple message that I send using php mail(). The code used:
//recipient info
$to = \"$bookernavn <$mail>\";
$from = \"Visens Venner Hillerød &
You don't check to see if the form has been submitted so a browser refresh will send the form data again and cause the mail to be sent again. This also happens when a user presses the back button.
After the email is sent you need to do a 303 redirect to prevent the re-submission. You can redirect to the same page if you'd like.
This is called the Post/Redirect/Get pattern.
mail(...);
header('Location: /some-page-php', true, 303);
exit;
an easy way to prevent this from happening is to use POST method instead of GET for the form.
<form method="post">
if (isset($_POST['submitted']))
and at the end of the mail code use a redirect that will send the browser to load using a GET method.
Not only you can then redirect your user to a OK page "mail was sent" or a error page "sorry there was a mistake, please try again", a refresh of that page open by the browser will only send a GET, not triggering the send mail function
if (empty($errors)) {
header('Location: http://www.example.com/mail_OK.html');
exit;
} else {
// passing data to the "error/retry" page
$info = array(
'msg' => $msg,
'email' => $_POST['email'],
'name' => $_POST['name']
// etc...
)
header('Location: http://www.example.com/mailform.php?'.http_build_query($info));
exit;
}
in your form you can retrieve those info
<input name="name" type="text" placeholder="Naam" class="form-control" value="<?php echo htmlspecialchars($_GET['name']); ?>">