发送HTML电子邮件时$ _POST不起作用

时间:2012-09-19 09:28:00

标签: php html forms email post

我一直在弄清楚我的代码有什么问题。我一直让$_POST无法正常工作。这是我的HTML代码:

<form id="EmailForm" action="mailForm.php" method="post" 
  onsubmit="validateForm()" enctype="text/plain">
  <div>
    Name: <input type="text" value="" name="name" size="30" />
    Email: <input type="text" value="" name="email" size="30" />
    Subject: <input type="text" value="" name="subject" size="60" />
    Message: <br />
    <textarea name="message" rows="5" cols="60"></textarea>
    <input type="submit" value="Send" />
  </div>
</form>

这是我的mailForm.php代码:

<?php
$name = $_POST['name']; 
$email = $_POST['email'];
$message = $_POST['message'];
$subject = $_POST['subject'];
$mailsent = mail("admin@example.com", "$subject", "$message\n\n$name\n$email", "");
if ($mailsent) {
echo ("Your email has been sent. Thank you for using our mail form. <br />");
echo ("Name: ".$name."<br />");
echo ("Email: ".$email."<br />");
echo ("Subject: ".$subject."<br />");
echo ("Message: ".$message);
}
?>

到目前为止,我可以收到电子邮件,但所有电子邮件都是空的。名称或电子邮件未显示,但从Web托管服务更改为默认名称。没有名字,没有电子邮件,没有主题,没有消息。在mailForm.php,我只得到以下内容:

Your email has been sent. Thank you for using our mail form.   
Name:
Email:
Subject: 
Message:

我已经尝试了echo $_POST["name"]; echo $_POST["email"]但是空页。

2 个答案:

答案 0 :(得分:1)

只需删除enctype="text/plain"

即可
<form id="EmailForm" action="mailForm.php" method="post" onsubmit="validateForm()">

PHP <form>标记中enctype的有效值为:

application/x-www-form-urlencoded
multipart/form-data

答案 1 :(得分:1)

在这种情况下,您不应在enctype="text/plain"代码中使用<form> ...

如果您使用该代码,则不会在$_POST中显示您的表单元素。

php有一个名为$HTTP_RAW_POST_DATA的变量,它会在使用enctype="text/plain"时将您发布的数据存储为简单字符串。

因此,HTML代码中的<form>标记应为:

<form id="EmailForm" action="mailForm.php" method="post" onsubmit="validateForm()">

enctype代码中的有效<form>值为:

application / x-www-form-urlencoded:默认。所有字符在发送之前都被编码(空格转换为“+”符号,特殊字符转换为ASCII HEX值)

multipart / form-data:空格转换为“+”符号,但不编码特殊字符不编码字符。使用具有文件上载控件的表单时需要此值

text / plain:空格转换为“+”符号,但不会编码特殊字符

除了text/plain,其他两种方法将在$ _POST ...

中作为数组使用