$ _POST无法从HTML表单获取数据

时间:2015-01-17 00:59:51

标签: php html5 .htaccess post phpmailer

我有一个联系表格,其中包含以下字段:姓名,电子邮件,网站和消息。当用户单击“提交”时,必须通过电子邮件发送用户输入的详细信息(我使用的是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 &nbsp;</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 &nbsp;</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 &nbsp;</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 &nbsp;</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 ^([^\.]+)$ $1.html [NC,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]

4 个答案:

答案 0 :(得分:2)

您要在服务器端检索的所有表单元素都必须设置name属性。您似乎缺少网站评论输入字段的此属性。

HTML更改示例:

<tr>
    <td style="font-size: 12px;">Website &nbsp;</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 &nbsp;</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'];

答案 1 :(得分:1)

删除enctype =&#34; text / plain&#34;因为编码类型应该是默认值,即&#39; url-form-encoded&#39;。

然后您可以通过查看原始POST数据进一步调试它:

echo file_get_contents('php://input');

或只是

print_r($_POST);

答案 2 :(得分:1)

除了hberg的答案,您还需要将字段变量合并到$mail->Body属性的构建中。现在,您有一个分配给$mail->Body的简单字符串,它根本不包含字段变量。

例如,试试这个:

$mail->Body = "Submitted Email: $email_add , Name: $visitor";

请注意,如果您实际构建包含变量的字符串,则必须使用双引号。我更喜欢使用printf()函数来构建这样的字符串,但上面的例子至少应该看看你的POST变量是否真的有效。

答案 3 :(得分:1)

首先,你已经错过了评论和网站的属性。

<td><input name="theNameYouNeed"></td>

例如,您需要评论

<td><input name="comment"></td>

此外,您还需要

$email_add = $_POST['email'];
$visitor = $_POST['name'];

还必须为其他表单添加$_POST。 此外,您还没有在任何地方回显或打印它们以便显示它们。

编辑:对于任何想要完整答案的人来说,问题在于他使用的是元素而不是输入元素。 <textarea>标记不会创建用于php数据的有效name属性。