$_POST 未从 HTML 表单获取数据
$_POST not getting data from HTML Form
我有一个包含以下字段的联系表:姓名、电子邮件、网站和消息。当用户点击提交时,用户输入的详细信息必须通过电子邮件发送(我使用 PHPMailer)。
邮件发送成功。但是,用户输入的详细信息未包含在电子邮件消息中。我一直在试图查看问题出在哪里,但我似乎没有找到它。
这是我的联系表格的代码:
<div class="right">
<form action="http://www.mokicruzphoto.com/testmailer.php" method="post" enctype="url-form-encoded" class="form">
<table>
<tbody>
<tr>
<td style="font-size: 12px;">*Name </td>
<td><input type="text" name="name" style="border: 1px solid rgba(0,0,0,0.3); color: rgba(0,0,0,0.7);" required/></td>
</tr>
<tr>
<td style="font-size: 12px;">*Email </td>
<td><input type="email" name="email" style="border: 1px solid rgba(0,0,0,0.3); color: rgba(0,0,0,0.7);" required/></td>
</tr>
<tr>
<td style="font-size: 12px;">Website </td>
<td><input type="text" name="website" style="border: 1px solid rgba(0,0,0,0.3); color: rgba(0,0,0,0.7);"/></td>
</tr>
<tr>
<td style="font-size: 12px;">*Comment/Message </td>
<td><textarea type="text" name="message" style="border: 1px solid rgba(0,0,0,0.3); resize: none; width: 300px; color: rgba(0,0,0,0.7);" required></textarea>
</tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr>
<td></td>
<td><input type="submit" name="submit" style="border: 1px solid rgba(0,0,0,0.2); background: rgba(0,0,0,0.16); width: 150px;"/></td>
</tr>
</tbody>
</table>
</form>
</div>
</div>
</div>
这是我的 PHP 文件:
<?php
require ("********************/PHPMailerAutoload.php");
$email_add = $_POST['email'];
$visitor = $_POST['name'];
$mail = new PHPMailer();
$mail->isSMTP();
$mail->Host = "localhost";
$mail->SMTPDebug = 1;
$mail->SMTPAuth = true;
$mail->Username = '********************';
$mail->Password = '********************';
$mail->SMTPSecure = "ssl";
$mail-> Port = 465;
$mail->From = "********************"; /*Sender*/
$mail->FromName = "********************"; /*Sender*/
$mail->addAddress('********************'); /*Recipient*/
$mail->addReplyTo('********************');
$mail->WordWrap = 50;
$mail->isHTML(true);
$mail->Subject = 'Test Email';
$mail->Body = 'Hi Iam using PHPMailer library to sent SMTP mail from localhost. This is a test email by JC Pineda';
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
exit;
}
echo 'Message has been sent';
?>
如果有帮助,这也是我的 HTACCESS:
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ .html [NC,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ .html [NC,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ .html [NC,L]
您要在服务器端检索的所有表单元素都必须设置 name
属性。您似乎缺少 website 和 comment 输入字段的此属性。
示例 HTML 更改:
<tr>
<td style="font-size: 12px;">Website </td>
<td><input type="text" name="website" style="border: 1px solid rgba(0,0,0,0.3); color: rgba(0,0,0,0.7);"/></td>
</tr>
<tr>
<td style="font-size: 12px;">*Comment/Message </td>
<td><textarea type="text" name="message" style="border: 1px solid rgba(0,0,0,0.3); resize: none; width: 300px; color: rgba(0,0,0,0.7);" required></textarea>
</tr>
然后在服务器端检索它:
$website = $_POST['website'];
$message = $_POST['message'];
删除 enctype="text/plain" 因为编码类型应该是默认的,即 'url-form-encoded'.
然后您可以通过查看原始 POST 数据进一步调试它:
echo file_get_contents('php://input');
或者干脆
print_r($_POST);
除了 hberg 的回答之外,您还需要将字段变量合并到 $mail->Body
属性 的构建中。现在您有一个分配给 $mail->Body
的简单字符串,它根本不包含字段变量。
例如,试试这个:
$mail->Body = "Submitted Email: $email_add , Name: $visitor";
请注意,如果您实际构建包含变量的字符串,则必须使用双引号。我更愿意使用 printf()
函数来构建这样一个字符串,但上面的示例至少应该看看你的 POST 变量是否真的有效。
首先,您的评论和网站都缺少属性。
<td><input name="theNameYouNeed"></td>
比如你的评论需要
<td><input name="comment"></td>
另外你还需要
$email_add = $_POST['email'];
$visitor = $_POST['name'];
也必须为其他表格添加一个 $_POST
。
此外,您还没有在任何地方回显或打印它们以让它们显示出来。
编辑:对于任何想要完整答案的人来说,问题是他使用的是元素而不是输入元素。 <textarea>
标签不会创建用于 php 数据的有效 name
属性。
我有一个包含以下字段的联系表:姓名、电子邮件、网站和消息。当用户点击提交时,用户输入的详细信息必须通过电子邮件发送(我使用 PHPMailer)。
邮件发送成功。但是,用户输入的详细信息未包含在电子邮件消息中。我一直在试图查看问题出在哪里,但我似乎没有找到它。
这是我的联系表格的代码:
<div class="right">
<form action="http://www.mokicruzphoto.com/testmailer.php" method="post" enctype="url-form-encoded" class="form">
<table>
<tbody>
<tr>
<td style="font-size: 12px;">*Name </td>
<td><input type="text" name="name" style="border: 1px solid rgba(0,0,0,0.3); color: rgba(0,0,0,0.7);" required/></td>
</tr>
<tr>
<td style="font-size: 12px;">*Email </td>
<td><input type="email" name="email" style="border: 1px solid rgba(0,0,0,0.3); color: rgba(0,0,0,0.7);" required/></td>
</tr>
<tr>
<td style="font-size: 12px;">Website </td>
<td><input type="text" name="website" style="border: 1px solid rgba(0,0,0,0.3); color: rgba(0,0,0,0.7);"/></td>
</tr>
<tr>
<td style="font-size: 12px;">*Comment/Message </td>
<td><textarea type="text" name="message" style="border: 1px solid rgba(0,0,0,0.3); resize: none; width: 300px; color: rgba(0,0,0,0.7);" required></textarea>
</tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr>
<td></td>
<td><input type="submit" name="submit" style="border: 1px solid rgba(0,0,0,0.2); background: rgba(0,0,0,0.16); width: 150px;"/></td>
</tr>
</tbody>
</table>
</form>
</div>
</div>
</div>
这是我的 PHP 文件:
<?php
require ("********************/PHPMailerAutoload.php");
$email_add = $_POST['email'];
$visitor = $_POST['name'];
$mail = new PHPMailer();
$mail->isSMTP();
$mail->Host = "localhost";
$mail->SMTPDebug = 1;
$mail->SMTPAuth = true;
$mail->Username = '********************';
$mail->Password = '********************';
$mail->SMTPSecure = "ssl";
$mail-> Port = 465;
$mail->From = "********************"; /*Sender*/
$mail->FromName = "********************"; /*Sender*/
$mail->addAddress('********************'); /*Recipient*/
$mail->addReplyTo('********************');
$mail->WordWrap = 50;
$mail->isHTML(true);
$mail->Subject = 'Test Email';
$mail->Body = 'Hi Iam using PHPMailer library to sent SMTP mail from localhost. This is a test email by JC Pineda';
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
exit;
}
echo 'Message has been sent';
?>
如果有帮助,这也是我的 HTACCESS:
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ .html [NC,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ .html [NC,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ .html [NC,L]
您要在服务器端检索的所有表单元素都必须设置 name
属性。您似乎缺少 website 和 comment 输入字段的此属性。
示例 HTML 更改:
<tr>
<td style="font-size: 12px;">Website </td>
<td><input type="text" name="website" style="border: 1px solid rgba(0,0,0,0.3); color: rgba(0,0,0,0.7);"/></td>
</tr>
<tr>
<td style="font-size: 12px;">*Comment/Message </td>
<td><textarea type="text" name="message" style="border: 1px solid rgba(0,0,0,0.3); resize: none; width: 300px; color: rgba(0,0,0,0.7);" required></textarea>
</tr>
然后在服务器端检索它:
$website = $_POST['website'];
$message = $_POST['message'];
删除 enctype="text/plain" 因为编码类型应该是默认的,即 'url-form-encoded'.
然后您可以通过查看原始 POST 数据进一步调试它:
echo file_get_contents('php://input');
或者干脆
print_r($_POST);
除了 hberg 的回答之外,您还需要将字段变量合并到 $mail->Body
属性 的构建中。现在您有一个分配给 $mail->Body
的简单字符串,它根本不包含字段变量。
例如,试试这个:
$mail->Body = "Submitted Email: $email_add , Name: $visitor";
请注意,如果您实际构建包含变量的字符串,则必须使用双引号。我更愿意使用 printf()
函数来构建这样一个字符串,但上面的示例至少应该看看你的 POST 变量是否真的有效。
首先,您的评论和网站都缺少属性。
<td><input name="theNameYouNeed"></td>
比如你的评论需要
<td><input name="comment"></td>
另外你还需要
$email_add = $_POST['email'];
$visitor = $_POST['name'];
也必须为其他表格添加一个 $_POST
。
此外,您还没有在任何地方回显或打印它们以让它们显示出来。
编辑:对于任何想要完整答案的人来说,问题是他使用的是元素而不是输入元素。 <textarea>
标签不会创建用于 php 数据的有效 name
属性。