刷新网页后,表单数据尝试重新发送

Form data tries to resend after I refresh the webpage

我并没有真正使用 PHP 并且这样做超出了我的范围。我正确设置了 XAMPP 及其“sendmail”文件夹,这样我就可以从我创建的网站发送电子邮件。电子邮件被发送给该人,但问题是,每当我在第一次发送邮件后尝试刷新时,网页都会告诉我“您正在查找的页面使用了您输入的信息。返回该页面可能导致重复你采取的任何行动”。因此,如果我单击继续,页面会刷新,但邮件会再次发送。

我尝试使用 header 进行重定向,但它并没有真正起作用。我收到一条错误消息,指出“无法修改 header 信息 - header 已发送”。 我也尝试了一些 AJAX 功能但没有成功。我真的无法理解这个问题,我现在非常感谢您的帮助

这是我的表格HTML

        <form method="post" action="#" class="contact-form" autocomplete="off">
            <div class="row">
                <div class="col span-1-of-3">
                    <label for="name">Name</label>
                </div>
                <div class="col span-2-of-3">
                    <input type="text" name="name" id="name" placeholder="Your name" required>
                </div>
            </div>



            <div class="row">
                <div class="col span-1-of-3">
                    <label for="email">Email</label>
                </div>
                <div class="col span-2-of-3">
                    <input type="email" name="email" id="email" placeholder="Your email" required>
                </div>
            </div>




            <div class="row">
                <div class="col span-1-of-3">
                    <label for="find-us">How did you find about us?</label>
                </div>
                <div class="col span-2-of-3">
                    <select name="find-us" id="find-us">
                        <option value="friends" selected>Friends</option>
                        <option value="search">Seach Engine</option>
                        <option value="other">Other</option>
                    </select>
                </div>
            </div>


            <div class="row">
                <div class="col span-1-of-3">
                    <label>Newsletter</label>
                </div>
                <div class="col span-2-of-3">
                    <input type="checkbox" name="newsletter" id="newsletter" checked>Yes, please
                </div>
            </div>


            <div class="row">
                <div class="col span-1-of-3">
                    <label>Mesaj</label>
                </div>
                <div class="col span-2-of-3">
                    <textarea name="message" placeholder="Your message" require></textarea>
                </div>
            </div>


            <div class="row">
                <div class="col span-1-of-3">
                    <label>&nbsp;</label>
                </div>
                <div class="col span-2-of-3 btn-send">
                    <input name="sendmail" type="submit" value="Send!"> 
                </div>
            </div>
        </form>
       
    </div>

这是我使用的 PHP 代码:

 <?php
                if(isset($_POST['sendmail'])){
                    mail($_POST['email'], 'Store' , 'Thanks for the message '.$_POST['name'].' !');
                    echo "Sent";
                }else{
                    echo "Fail";
                } 
                
            ?>

您需要将用户重定向到另一个页面或同一页面,使用 POST/REDIRECT/GET pattern to avoid this. Sending a 303 HTTP response 将告诉浏览器在其历史记录中替换该页面并避免重新发送已发布的数据。

if (mysqli_query($connection, $register)) {
    if(isset($_POST['sendmail'])){
        mail($_POST['email'], 'Store' , 'Thanks for the message '.$_POST['name'].' !');
        header('Location: index.php', true, 303);
        exit;
    }
    else {
        // Handle error
    }
}

这是一个非常基本的例子。您需要为 mail() 的调用添加错误 checking/handling,因为它可能会失败。您还应该有某种消息让用户知道电子邮件已发送。