Ошибки PHP при использовании валидатора формы

Я получаю следующие ошибки PHP при использовании формы контактов, которая работала нормально, пока клиент не сказал, что они не получают письма с недели. Поскольку друг помог мне с бэкэндом, и он сейчас недоступен, чтобы спросить, я хотел бы любезно спросить, не могли бы вы дать мне подсказку, что мне нужно исправить.

Ошибки:

`[Wed Feb 17 16:43:44 2016] [warn] [клиент 37.24.118.150] mod_fcgid: stderr: PHP Примечание: неопределенная переменная: заголовки в /var/www/vhosts/wscgmbh.de/httpdocs/php/contact- form-handler.php в строке 29, реферер: http://www.wscgmbh.de/contact.html

[Ср. 17 февраля 16:43:44 2016] [warn] [клиент 37.24.118.150] mod_fcgid: stderr: PHP Предупреждение: mail (): В дополнительном заголовке в /var/www/vhosts/wscgmbh.de/ обнаружены множественные или неправильно сформированные символы новой строки. httpdocs / php / contact-form-handler.php в строке 32, реферер: http://www.wscgmbh.de/contact.html

[Ср 17 фев 16:45:18 2016] [warn] [клиент 37.24.118.150] mod_fcgid: stderr: PHP Примечание: неопределенная переменная: заголовки в /var/www/vhosts/wscgmbh.de/httpdocs/php/contact-form -handler.php в строке 29, реферер: http://www.wscgmbh.de/contact.html

[Ср. 17 февраля 16:45:18 2016] [warn] [клиент 37.24.118.150] mod_fcgid: stderr: PHP Предупреждение: mail (): В файле Additional_header в /var/www/vhosts/wscgmbh.de/ обнаружены множественные или неправильно сформированные символы новой строки. httpdocs / php / contact-form-handler.php в строке 32, реферер: http://www.wscgmbh.de/contact.html

[Среда, 17 февраля 17:02:25 2016] [предупреждение] [клиент 37.24.118.150] mod_fcgid: stderr: PHP Примечание: неопределенный индекс: имя в /var/www/vhosts/wscgmbh.de/httpdocs/php/contact-form -handler.php в строке 12

[Среда, 17 февраля 17:02:25 2016] [warn] [клиент 37.24.118.150] mod_fcgid: stderr: PHP Примечание: неопределенный индекс: электронная почта в /var/www/vhosts/wscgmbh.de/httpdocs/php/contact-form -handler.php в строке 13

[Среда, 17 февраля 17:02:25 2016] [warn] [клиент 37.24.118.150] mod_fcgid: stderr: PHP Примечание: неопределенный индекс: сообщение в /var/www/vhosts/wscgmbh.de/httpdocs/php/contact-form -handler.php в строке 14

[Четверг, 18 февраля 09:40:15 2016] [warn] [клиент 213.23.122.15] mod_fcgid: stderr: PHP Примечание: неопределенная переменная: заголовки в /var/www/vhosts/wscgmbh.de/httpdocs/php/contact-form -handler.php в строке 29, реферер: http://www.wscgmbh.de/contact.html

[Четверг, 18 февраля 09:40:15 2016] [warn] [клиент 213.23.122.15] mod_fcgid: stderr: PHP Предупреждение: mail (): множественные или неправильно сформированные новые строки найдены в Additional_header в /var/www/vhosts/wscgmbh.de/ httpdocs / php / contact-form-handler.php в строке 32, реферер: http://www.wscgmbh.de/contact.html`


Это код обработчика форм, который работал все время, но вдруг не

<meta http-equiv="Content-Type" content="text/html"; charset="utf-8" />
<?php
$errors = '';
$myemail = '[email protected]';
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

Решение

Проблема здесь в том, что вы пропустили (и объявили заголовки как массив):
(Также проконсультируйтесь с моим редактировать ниже в отношении 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 <[email protected]>";
$headers[] = "Bcc: JJ Chong <[email protected]>";
$headers[] = "Reply-To: Recipient Name <[email protected]>";
$headers[] = "Subject: {$subject}";
$headers[] = "X-Mailer: PHP/".phpversion();

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

Кроме того, From: ожидает письмо, а не имя, поэтому из-за него почта может оказаться спамом.

  • Используйте адрес электронной почты.

Ссылка:


Если вы хотите использовать точки (конкатенации) и \r\ns, тогда вам нужно использовать следующее, а также в соответствии с примером из руководства:

// 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 <[email protected]>, Kelly <[email protected]>' . "\r\n";
$headers .= 'From: Birthday Reminder <[email protected]>' . "\r\n";
$headers .= 'Cc: [email protected]' . "\r\n";
$headers .= 'Bcc: [email protected]' . "\r\n";

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

Редактировать:

Я заметил слова Antworten Sie: что по-немецки означает «Ответить» (когда я посетил Google Translate).

Если это предназначено, чтобы быть From: или же Reply-to, то вы не можете использовать это как часть почтового заголовка, но как Reply-To: согласно инструкции говорится:

Reply-To: [email protected]

Следовательно, ваш код должен читаться как:

$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() сделал свою работу Смотрите также ваш спам.

добавлять Отчет об ошибках в начало вашего файла (ов), который поможет найти ошибки.

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

// Then the rest of your code

Примечание: Отображать ошибки следует только в постановке, а не в производстве.


Рассмотрите возможность использования PHPMailer или Swiftmailer:

которые являются альтернативами PHP mail() функция.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]