PHP使用表单验证器时出错

时间:2016-02-18 16:28:00

标签: php forms handler

我在使用联系表单时遇到PHP错误,该表单工作正常,直到客户说他们自一周以来没有收到电子邮件。正如一位朋友帮助我使用后端,并且他现在无法提问,我想问一下你是否可以给我一个暗示我需要解决的问题。

错误:

`[Wed Feb 17 16:43:44 2016] [warn] [client 37.24.118.150] mod_fcgid:stderr:PHP注意:未定义的变量:/var/www/vhosts/wscgmbh.de/httpdocs/php中的头文件第29行的/contact-form-handler.php,referer:http://www.wscgmbh.de/contact.html

[Wed Feb 17 16:43:44 2016] [warn] [client 37.24.118.150] mod_fcgid:stderr:PHP警告:mail():在/ var / www / vhosts / wscgmbh的additional_header中找到多个或格式错误的换行符第32行的.de / httpdocs / php / contact-form-handler.php,referer:http://www.wscgmbh.de/contact.html

[Wed Feb 17 16:45:18 2016] [warn] [client 37.24.118.150] mod_fcgid:stderr:PHP注意:未定义的变量:/var/www/vhosts/wscgmbh.de/httpdocs/php/中的标题第29行的contact-form-handler.php,引用者:http://www.wscgmbh.de/contact.html

[Wed Feb 17 16:45:18 2016] [warn] [client 37.24.118.150] mod_fcgid:stderr:PHP警告:mail():在/ var / www / vhosts / wscgmbh的additional_header中找到多个或格式错误的换行符第32行的.de / httpdocs / php / contact-form-handler.php,referer:http://www.wscgmbh.de/contact.html

[Wed Feb 17 17:02:25 2016] [warn] [client 37.24.118.150] mod_fcgid:stderr:PHP注意:未定义的索引:/var/www/vhosts/wscgmbh.de/httpdocs/php/中的名称第12行的contact-form-handler.php

[Wed Feb 17 17:02:25 2016] [warn] [client 37.24.118.150] mod_fcgid:stderr:PHP注意:未定义的索引:/var/www/vhosts/wscgmbh.de/httpdocs/php/中的电子邮件第13行的contact-form-handler.php

[Wed Feb 17 17:02:25 2016] [warn] [client 37.24.118.150] mod_fcgid:stderr:PHP注意:未定义的索引:/var/www/vhosts/wscgmbh.de/httpdocs/php/中的消息第14行的contact-form-handler.php

[Thu Feb 18 09:40:15 2016] [warn] [client 213.23.122.15] mod_fcgid:stderr:PHP注意:未定义的变量:/var/www/vhosts/wscgmbh.de/httpdocs/php/中的标题第29行的contact-form-handler.php,引用者:http://www.wscgmbh.de/contact.html

[Thu Feb 18 09:40:15 2016] [warn] [client 213.23.122.15] mod_fcgid:stderr:PHP警告:mail():在/ var / www / vhosts / wscgmbh的additional_header中找到多个或格式错误的换行符第32行的.de / httpdocs / php / contact-form-handler.php,referer:http://www.wscgmbh.de/contact.html`

这是表单处理程序的代码,它一直在工作,但突然间没有

<meta http-equiv="Content-Type" content="text/html"; charset="utf-8" />
 <?php 
$errors = '';
$myemail = 'service@wscgmbh.de';
if(empty($_POST['name'])  || 
empty($_POST['email']) || 
empty($_POST['message']))
{
$errors .= "\n Error: all fields are required";
}

$name = $_POST['name']; 
$email_address = $_POST['email']; 
$message = $_POST['message']; 

if (!preg_match(
"/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]    {2,3})$/i", 
$email_address))
{
$errors .= "\n Error: Invalid email address";
}

if( empty($errors))
{
$to = $myemail; 
$email_subject = "Sie haben eine neue Nachricht von: $name";
$email_body = "Sie haben eine neue Nachricht erhalten, hier sind die     Details: \n\nName: $name \nEmail: $email_address \nNachricht: \n$message"; 

$headers [] .= 'From: WSC-Kontaktformular' . "\r\n";
$headers [] = "Antworten Sie: {$email_address}";

mail($to,$email_subject,$email_body,implode("\r\n",$headers));
//redirect to the 'thank you' page

echo '<script> 
        alert("Danke für Ihre Nachricht. Wir werden uns bald bei  melden!");
        window.location = "http://www.wscgmbh.de"
    </script>';
 } 
 ?>

我不是专家和PHP,所以我真的希望有人可以帮助我! 非常感谢你提前!!!

1 个答案:

答案 0 :(得分:2)

这里的问题是你缺少(并将标题声明为数组):
(另请参阅下面有关Antworten Sie:)的修改

$headers   = array();

放在上面:

$headers [] .= 'From: WSC-Kontaktformular' . "\r\n";
$headers [] = "Antworten Sie: {$email_address}";

您还需要删除点(连接)和. "\r\n"

implode("\r\n",$headers)会照顾它。

$headers   = array();
$headers [] = 'From: WSC-Kontaktformular';
$headers [] = "Antworten Sie: {$email_address}";

根据邮件手册的例子:

$headers   = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-type: text/plain; charset=iso-8859-1";
$headers[] = "From: Sender Name <sender@domain.com>";
$headers[] = "Bcc: JJ Chong <bcc@domain2.com>";
$headers[] = "Reply-To: Recipient Name <receiver@domain3.com>";
$headers[] = "Subject: {$subject}";
$headers[] = "X-Mailer: PHP/".phpversion();

mail($to, $subject, $email, implode("\r\n", $headers));

另外,From:需要一封电子邮件,而不是一个名字,因此邮件可能会因此而成为垃圾邮件。

  • 使用电子邮件地址。

参考:

如果你想使用圆点(连接)和\r\n,那么你需要使用以下代码,并按照手册中的例子进行操作:

// To send HTML mail, the Content-type header must be set
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// Additional headers
$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
$headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
$headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
$headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";

// Mail it
mail($to, $subject, $message, $headers);

修改

我注意到Antworten Sie:这个词在德语中似乎意味着“回复”(当我访问Google翻译时)。

如果是From:Reply-to,那么您不能将其用作邮件标题的一部分,而是按照手册中的Reply-To:说明:< / p>

Reply-To: webmaster@example.com

因此,您的代码需要读作:

$headers   = array();
$headers [] = 'From: WSC-Kontaktformular';
$headers [] = "Reply-To: {$email_address}";

这也是标题失败的一个因素。

更改mail($to,$email_subject,$email_body,implode("\r\n",$headers));

为:

if(mail($to,$email_subject,$email_body,implode("\r\n",$headers))) { 
      echo "Mail sent."; 
   } else { 
      echo "Error."; 
   }

如果您看到“已发送邮件”,则mail()已完成其工作。也可以查看您的垃圾邮件。

error reporting添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Then the rest of your code

旁注:只应在暂存时进行显示错误,而不是生产。

考虑使用PHPMailer或Swiftmailer:

是PHP的mail()函数的替代品。