I am using the script below to send my contact form. But if any user refresh the page, the email is sent a second time with the same data. I tried to use
$_POST = array();
But it's not working. I also tried to use header('location'), but I always got "headers already sent issue..." so I am quite confused on how to proceed.
Here is my code, thanks for your help.
<?php if(!empty($_POST)) :
if(empty($_POST['foo'])) :
if(!empty($_POST['firstname']) && !empty($_POST['lastname']) && !empty($_POST['email']) && !empty($_POST['subject']) && !empty($_POST['message'])):
$firstname = wp_strip_all_tags(trim($_POST['firstname']));
$lastname = wp_strip_all_tags(trim($_POST['lastname']));
$email = wp_strip_all_tags(trim($_POST['email']));
$subject = wp_strip_all_tags(stripslashes(trim($_POST['subject'])));
$message = wp_strip_all_tags(stripslashes(trim($_POST['message'])));
$content = nl2br($message);
ob_start();
include('inc/email/contact-template.php');
$html = ob_get_clean();
$headers = 'MIME-Version: 1.0' . "\r\n" . 'Content-type: text/html; charset=UTF-8' . "\r\n" . 'From: '. $firstname . " " . $lastname . ' <' . $email . '>' . "\r\n" . 'Reply-To: '. $firstname . " " . $lastname . ' <' . $email . '>';
if(wp_mail(get_option('admin_email'), $subject, $html, $headers)) :
$_POST = array();
$success = "Votre message a bien été envoyé. Nous vous recontacterons dans les plus brefs délais.";
else:
$errors = "Un problème est survenu. Veuillez réessayer plus tard ou nous contacter par téléphone.";
endif;
else :
$errors = "Veuillez remplir tous les champs correctement";
endif;
endif;
endif; ?>
<?php get_header() ?>
<!-- Main Content -->
<main class="container">
<!-- Content -->
<?php if (have_posts()) :
while (have_posts()) : the_post(); ?>
<div class="py-5 px-3 px-md-5 bg-body shadow-sm">
<section class="row">
<article class="col-lg-12 col-xl-8 mb-5 mb-md-0" id="post-<?php the_ID(); ?>">
<?php the_content(); ?>
<h3>Nous contacter par email</h3>
<?php if(isset($success)) : ?>
<div class="toast text-white bg-success w-auto fade hide" role="status" aria-live="polite" aria-atomic="true" data-bs-autohide="false">
<div class="d-flex">
<div class="toast-body">Votre message a bien été envoyé. Nous vous recontacterons dans les plus brefs délais.</div>
<button type="button" class="btn-close btn-close-white me-2 m-auto" data-bs-dismiss="toast" aria-label="Close"></button>
</div>
</div>
<?php elseif(isset($errors)) : ?>
<div class="toast text-white bg-warning w-auto fade hide" role="status" aria-live="polite" aria-atomic="true" data-bs-autohide="false">
<div class="d-flex">
<div class="toast-body"><?= $errors ?></div>
<button type="button" class="btn-close btn-close-white me-2 m-auto" data-bs-dismiss="toast" aria-label="Close"></button>
</div>
</div>
<?php endif; ?>
<form method="post" autocomplete="off" action="<?= the_permalink() ?>" id="test">
<div class="row g-2">
<div class="col-12 col-md-6">
<label class="form-label" for="firstname">Prénom</label>
<input type="text" name="firstname" class="form-control" id="firstname" required="required" />
</div>
<div class="col-12 col-md-6">
<label class="form-label" for="lastname">Nom</label>
<input type="text" name="lastname" class="form-control" id="lastname" required="required" />
</div>
<div class="col-12 col-md-6">
<label class="form-label" for="email">Email</label>
<input type="email" name="email" class="form-control" id="email" required="required" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$" maxlength="255" />
</div>
<div class="col-12 col-md-12">
<label class="form-label" for="subject">Sujet</label>
<input type="text" name="subject" class="form-control" id="subject" required="required" />
</div>
<div class="col-12 mb-3">
<label class="form-label" for="message">Message</label>
<textarea name="message" class="form-control" id="message" rows="5" required="required" minlength="100"></textarea>
<input type="text" name="foo" id="foo" class="foo" />
</div>
<div class="submit">
<input type="submit" class="btn btn-primary" value="Envoyer">
</div>
</div>
</form>
</article>
<aside class="col-xl-3 offset-xl-1 mt-0">
<?php get_sidebar() ?>
</aside>
</section>
</div>
<?php endwhile;
endif; ?>
</main>
<!-- End of Main Content -->
<?php get_footer() ?>