2014-10-02 142 views
1

给定一个标准的html表单,如下面的表单;使用php发送邮件

<form method="post" action=<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>> 
          <div class="row half"> 
           <div class="6u"><input type="text" placeholder="Name" name="name" /></div> 
           <div class="6u"><input type="text" placeholder="Email" name="email" /></div> 
          </div> 
          <div class="row half"> 
           <div class="12u"><textarea name="message" placeholder="Message" name="message"></textarea></div> 
          </div> 
          <div class="row"> 
           <div class="12u"> 
            <ul class="actions"> 
             <li><input type="submit" class="button" value="Send Message" name="submit" /></li> 
             <li><input type="reset" class="button alt" value="Clear Form" name="clear"/></li> 
            </ul> 
           </div> 
          </div> 
         </form> 

而下面的PHP

if(isset($_POST['submit'])){ 
    $to = "[email protected]"; // this is your Email address 
    $from = $_POST['email']; // this is the sender's Email address 
    $name = $_POST['name']; 
    $subject = "Website Enquiry"; 
    $message = $name . " wrote the following:" . "\n\n" . $_POST['message']; 
    $headers = "From:" . $from; 
    $headers2 = "From:" . $to; 

    if(isValidString($from) && isValidString($name) && isValidString($message)){ 
     mail($to,$subject,$message,$headers); 
    } 
} 

它可以发送电子邮件,但是,这种方法会导致几个问题。因为我的表单位于页面的底部,所以当点击发送时,页面被重定向回来,并且焦点返回到页面的顶部。

什么是正确的方式来提供足够的用户反馈,让用户知道电子邮件已发送,是否可以导航回页面并自动滚动到底部 - 允许我将发送按钮更改为绿色或什么?

如果失败了,是否有更好的方法来做到这一点?

谢谢

+0

如果我了解你想添加一个反馈。你可以做一些事情(只是一个例子)'''if($ mail){header('Location:form.php?status = success'); }''''并在form.php中添加''''$ response = $ _GET ['status']; if($ response =='success'){echo“Mail has been sent”; }'''' – 2014-10-02 08:50:32

回答

0

表单动作应该指向页面本身(就像它在你的例子中那样),所以你可以从验证中显示错误消息(就像你不这样做)。

如果表格是不是在你的页面的顶部,你可以添加锚点:

<h2><a name="theForm">The form</a></h2> 
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>#theForm"> 

如果表单正确处理(=邮件发送),这是很好的做法,重定向到另一个页面,展示成功消息。所以按F5不会再次提交表单(并发送另一封邮件)。

if (mail($to,$subject,$message,$headers)) { 
    // redirect to page showing success message and exit script 
} else { 
    // redirect to page showing error message and exit script 
} 

我通常重定向到同一页面了,但附加一个参数($_SERVER["PHP_SELF"].'?mail_success=1'),然后我决定是否显示成功消息,错误消息或表单模板内:

if (isset($_REQUEST['mail_success'])) { 
    // show success message 
} elseif (isset($_REQUEST['mail_error'])) { 
    // show error message, technical issues, try again bla bla 
} else { 
    // show the form (including validation errors if necessary) 
} 
4

在窗体前添加一个锚链接。 <a id="anchorName"></a>

将表单发布到锚点。

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>#anchorName">

0

你可以使用一个XMLHttpRequest提交表单,并取消按提交的默认操作。 jQuery的.post()和event.preventDefault()方法尤其擅长。