【问题标题】:PHP - email form POSTs empty variables (RewriteEngine Off)PHP - 电子邮件表单发布空变量(RewriteEngine Off)
【发布时间】:2016-06-02 04:53:03
【问题描述】:

我花了两天多的时间来解决这个问题,包括这个社区。仍然无法弄清楚问题的原因。

1) 我的表单第一行定义:

<form id="main-contact-form" name="contact-form" method="post" action="/mail/sendemail.php">

所有输入元素都定义了“name”参数。

2) 我将 sendemail.php 文件权限更改为 755

3)我的htaccess文件不包含RewriteEngine标志,如下:

IndexIgnore .htaccess .htpasswd */.??* *~ *# */HEADER* */README* */_vti*
DirectoryIndex index.html
AddHandler php5.5-fastcgi php

实际上 - 我从我的其他网站复制了这个 htaccess 文件,其中不同的电子邮件表单效果很好。

4) 我尝试多次修改 sendemail.php。 我排除了任何验证功能,如空、修剪等 - 尝试简单:$from = $_POST['email'] - no additional validation - 仍然不起作用。

5)sendemail.php:

$name       = @trim(stripslashes($_POST['name'])); 
$from       = @trim(stripslashes($_POST['email'])); 
$subject    = @trim(stripslashes($_POST['subject'])); 
$message    = @trim(stripslashes($_POST['message'])); 
$to         = 'changed@changed.com';

$headers = 'MIME-Version: 1.0'. "\r\n".
           'Content-type: text/plain; charset=iso-8859-1'."\r\n".
           'From: '.$name."\r\n".
           'Reply-To: '.$from."\r\n".
           'Subject: '.$subject."\r\n".
           'X-Mailer: PHP/'.phpversion();

mail($to, $subject, $message, $headers);
die;

6) 正在发送邮件,但没有 From、Subject 和 Message - 这些值为空。

7) 这是一个简单的单页网站,带有联系表格,只有一个 php 脚本。

在大多数文章中,我可以读到 RewriteEngine 通常是造成此错误的原因 - 但我使用绝对路径 /mail/sendemail.php 并且我的 htaccess 文件中没有定义 RewriteEngine 标志。

更新。

8. 在原始 sendemail.php 脚本中,有一个数组变量用于创建 $headers - 但是 - 我的服务器日志中有一条信息,该数组(类型)不能用作邮件函数中的第四个参数。正如我上面已经提到的,我决定以不同的方式创建 $headers。也许这个数组应该被转换成可以被接受为邮件函数中的第四个参数的东西?

$headers   = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-type: text/plain; charset=iso-8859-1";
$headers[] = "From: {$name} <{$from}>";
$headers[] = "Reply-To: <{$from}>";
$headers[] = "Subject: {$subject}";
$headers[] = "X-Mailer: PHP/".phpversion();

【问题讨论】:

  • 您是否已转储变量?他们是你所期望的吗?您是否尝试过不使用额外的 headers 参数发送?
  • 在操作之前使用 @ 通常是不好的做法。如果您不希望出现错误,请使用一些防御性编程并检查您的 POST 变量是否设置为 isset 或其他。
  • @Progrock - 如果额外的 headers 参数是原因(它的构造),至少 $message 应该正确发送,因为这不是 headers 的一部分。

标签: php .htaccess mod-rewrite post


【解决方案1】:

试试:

$headers = "MIME-Version: 1.0\n". "Content-Type: text/plain; charset=\"iso-8859-1\"\n". "From: $name\n". "Reply-To: $from\n". "Subject: $subject\n";

【讨论】:

  • 嗨,不幸的是它没有帮助。这意味着此时在代码中我的 POST 变量为空。
【解决方案2】:

最终有效的代码:

<?php

$name       = @trim(stripslashes($_POST['name'])); 
$from       = @trim(stripslashes($_POST['email'])); 
$subject    = @trim(stripslashes($_POST['subject'])); 
$message    = @trim(stripslashes($_POST['message'])); 
$to         = 'valid-address@valid-domain.com';

$headers = "MIME-Version: 1.0\n".
           "Content-Type: text/plain; charset=\"iso-8859-1\"\n".
           "From: $name\n".
           "Reply-To: $from\n".
           "Subject: $subject\n".
           "X-Mailer: PHP/".phpversion();

mail($to, $subject, $message, $headers);

echo 
    // Back to previous page
    "<script>
        alert('Dziękuje za przesłanie wiadomości. Postaram się odpowiedzieć możliwie szybko.');
        window.history.go(-1);      
     </script>";

die;
?>

感谢您的所有建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 2016-06-07
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多