PHP - 电子邮件表单 POST 空变量(重写引擎关闭)


PHP - email form POSTs empty variables (RewriteEngine Off)

我花了两天多的时间在这个问题上,包括这个社区。仍然无法弄清楚问题的原因是什么。

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

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

所有输入元素都定义了"名称"参数。

2)我将发送电子邮件.php文件权限更改为755

3)我的htaccess文件不包含重写引擎标志,如下所示:

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

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

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

5) 发送电子邮件.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) 正在发送邮件,但没有发件人、主题和消息 - 这些值为空。

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

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

更新。

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

$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 = "MIME-Version: 1.0'n". "Content-Type: text/plain; charset='"iso-8859-1'"'n". "From: $name'n". "Reply-To: $from'n". "Subject: $subject'n";

最终有效的代码:

<?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;
?>

谢谢你的所有建议。