PHP表单不会将提交的数据发送到电子邮件

时间:2013-08-05 20:43:34

标签: php html forms

我有一个HTML-PHP混合的联系表单。

PHP脚本用于将表单数据发送到电子邮件地址,但它仅发送元素ID而不附加提交的值。

这是我正在使用的代码:

<?php 
$ToEmail = 'email@yahoo.com'; 
$EmailSubject = 'Site contact form'; 
$mailheader = "From: ".$_POST["email"]."\r\n"; 
$mailheader .= "Reply-To: ".$_POST["email"]."\r\n"; 
$mailheader .= "Content-type: text/html; charset=iso-8859-1\r\n"; 
$MESSAGE_BODY = "Name: ".$_POST["name"].""; 
$MESSAGE_BODY .= "Email: ".$_POST["email"].""; 
$MESSAGE_BODY .= "Subject: ".$_POST["subject"]."";
$MESSAGE_BODY .= "Comment: ".nl2br($_POST["comment"]).""; 
mail($ToEmail, $EmailSubject, $MESSAGE_BODY, $mailheader) or die ("Failure"); 
?>

                            <form class="form-horizontal" name="contactform" action="contact.php" method="post">
                                  <div class="control-group">
                                    <label class="control-label" for="name">Name*</label>
                                    <div class="controls">
                                      <input type="text" id="name" placeholder="Name">
                                    </div>
                                  </div>
                                  <div class="control-group">
                                    <label class="control-label" for="email">Email*</label>
                                    <div class="controls">
                                      <input type="text" id="email" placeholder="Email">
                                    </div>
                                  </div>
                                  <div class="control-group">
                                    <label class="control-label" for="subject">Subject*</label>
                                    <div class="controls">
                                      <input type="text" id="subject" placeholder="Subject">
                                    </div>
                                  </div>
                                   <div class="control-group">
                                    <label class="control-label" for="comment">Message*</label>
                                    <div class="controls">

                                      <textarea rows="4" id="comment" placeholder="Type your message here..."></textarea>
                                    </div>
                                  </div>
                                  <div class="control-group">
                                    <div class="controls">
                                      <p> *Required fields</p>
                                      <button type="submit" name="submit" class="btn">Submit</button>
                                    </div>
                                  </div>
                            </form>

4 个答案:

答案 0 :(得分:4)

您的输入都缺少name属性,该属性是通过post发送到服务器的。

<input type="text" id="email" placeholder="Email" name="email">

您将使用$_POST['email']

访问变量

我建议你抓住一个现成的库来处理这个http://swiftmailer.org/

答案 1 :(得分:1)

您也可以使用以下方法测试表单变量:

print_r($_POST);

显然你会想把它放到某种检查中,例如:

if($_POST)
{
    print_r($_POST);
}

答案 2 :(得分:0)

正如 user2023 ... 已经说过,您的输入表单缺少name属性。

将您的行更改为:

<input type="text" id="name" name="name" placeholder="Name">
<input type="text" id="email" name="email" placeholder="Email">
<input type="text" id="subject" name="subject" placeholder="Subject">
<textarea rows="4" id="comment" name="comment" placeholder="Type your message here..."></textarea>

然后在表单处理脚本中,您可以执行以下操作:

if( isset($_POST['submit']) ) { //checking if the form was submitted

print_r($_POST); //this would give you all the submitted fields

$name = $_POST["name"];
$email = $_POST["email"];
//and so on...

}

答案 3 :(得分:0)

通过POST或GET从表单中提供的输入由HTML中给出的名称属性标识,而不是 id 。所以你应该给

<input type="text" name="name" placeholder="Name" />
在您的HTML中

,并使用$_POST["name"]访问处理代码中的值。

此外,我认为您使用相同的文件 contact.php ,用于显示表单的代码和用于处理表单输入的PHP代码。这没关系,但在这种情况下,您需要检查

if (isset ($_POST ["submit"]) {
    /* code to process input from user */
}
在您的PHP代码中

(否则在首次显示表单时它将无法正常工作)。