0

我一直在弄清楚我的代码有什么问题。我一直$_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);
}
?>

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

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

我试过echo $_POST["name"]; echo $_POST["email"]了,但是页面是空的。

4

2 回答 2

1

只需删除enctype="text/plain"

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

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

application/x-www-form-urlencoded
multipart/form-data
于 2012-09-19T09:30:41.620 回答
1

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

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

php 有一个名为的变量$HTTP_RAW_POST_DATA,当使用enctype="text/plain".

所以你<form>在 HTML 代码中的标签应该是这样的:

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

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

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

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

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

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

于 2012-09-19T09:40:41.737 回答