我一直在弄清楚我的代码有什么问题。我一直让$_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"]
但是空页。
答案 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 ...