我正在使用下面的脚本发送我的联系表。但是,如果任何用户刷新页面,则会使用相同的数据再次发送电子邮件。我尝试使用
$_POST = 数组();
但是它不起作用。我也尝试使用 header('location'),但我总是收到“标头已发送问题...”,所以我对如何继续感到非常困惑。
这是我的代码,感谢您的帮助。
<?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() ?>
您可以在这里使用 Javascript 作为提示。问题是请求已经发送到服务器,并且您再次使用标头。我使用
header()
函数也遇到了同样的问题。
试试这个:
$location = site_url();
<!-- Redirecting to Homepage -->
<script>
window.location.replace('<?php echo $location; ?>');
</script>