如何在Wordpress中清除$_POST数据以避免刷新时重复提交

问题描述 投票:0回答:1

我正在使用下面的脚本发送我的联系表。但是,如果任何用户刷新页面,则会使用相同的数据再次发送电子邮件。我尝试使用

$_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() ?>
php wordpress custom-wordpress-pages wp-mail
1个回答
0
投票

您可以在这里使用 Javascript 作为提示。问题是请求已经发送到服务器,并且您再次使用标头。我使用

header()
函数也遇到了同样的问题。

试试这个:

$location = site_url(); 
    
<!-- Redirecting to Homepage -->
<script> 
  window.location.replace('<?php echo $location; ?>');
</script>
© www.soinside.com 2019 - 2024. All rights reserved.