表单重定向问题

时间:2011-07-28 20:49:31

标签: php xhtml

  

可能重复:
  How to stop form from sending email more times after initial success.

首先,我使用目录构建了我的网站。所以基本上每个页面都是一个目录,在那个目录中,我有一个名为index.php的文件。

我的网站上有四个联系表单,目前使用hnadler.php文件似乎全部工作。处理程序文件验证数据,检查发布的表单ID,并根据它,它适当地路由电子邮件。如果成功发送,则显示成功消息。但是,我目前的意见是有缺陷的,如果用户刷新,则会发送另一封邮件。如何使用现有代码解决这个问题?谢谢

//handler.php   
<?php
    if(isset($_POST['submit'])) {
    //carry out validation

    if(!isset($hasError)) {
        //check the form id posted and set email address in $emailTo accordingly

        $body = "Name: $name \n\nEmail: $email \n\nEnquiry: $enquiry";
        $headers = 'From: My Site <'.$emailTo.'>' . "\r\n" . 'Reply-To: ' . $email;

        mail($emailTo, $subject, $body, $headers);
        $emailSent = true;        
    }
}

//index.php
<?php if(isset($hasError)) { ?> 
    <p class="error">Please make sure you have filled all fields with valid information. Thank you.</p>
<?php } ?>                        
<?php if(isset($emailSent) && $emailSent == true) { ?>
    <p><strong>Your enquiry was sent successfully.</strong></p>
    <p>Thank you for your enquiry! Your email was successfully sent and we will be in touch with you promptly.</p>
<?php }; ?>                       
<form id="contactform" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <fieldset>
        <legend>Enquiry form</legend>
        <label for="name">Name:</label><input type="text" size="50" name="name" id="name" value="" class="required" />
        <label for="email">Email:</label><input type="text" size="50" name="email" id="email" value="" class="required email" />
        <label for="enquiry">Enquiry:</label><textarea rows="5" cols="20" name="enquiry" id="enquiry" class="required"></textarea>
        <input type="submit" name="submit" value="Submit enquiry" class="curved-btn"></input>
        <input type="hidden" id="form-id" name="form-id" value="general"></input>
    </fieldset>
</form>

?>

2 个答案:

答案 0 :(得分:0)

问题是你实际提交到handler.php是因为:

<form id="contactform" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">

将其更改为:

<form id="contactform" method="post" action="handler.php">

并将您的发送电子邮件代码放在handler.php中。您还需要在其中放置一个重定向,以使它们返回到页面。还有其他方法可以解决这个问题,但这就是我要做的事情。

答案 1 :(得分:0)

浏览器将/可以在刷新时重新发布数据,因此它看起来像是一个新请求。

快速解决方法是在表单提交后重定向:

header("Location: success.php");

如果刷新它们会刷新成功页面,而不是你发布的页面。