Top.Mail.Ru
Ответы

Проблемы с PHP кодом. Отправка формы на почту

Форма отправки отзывов с сайта не работает. Отзыв должен приходить на почту.

<?php
//данные с элементов формы

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

//обработка полученных данных

$name = htmlspecialchars($name); //преобразование символов в сущности
$email = htmlspecialchars($email);
$phone = htmlspecialchars($phone);
$message = htmlspecialchars($message);

$name = urldecode($name); //декодирование URL
$email = urldecode($email);
$phone = urldecode($phone);
$message = urldecode($message);

$name = trim($name); //удаление пробельных символов с обоих сторон
$email = trim($email);
$phone = trim($phone);
$message = trim($message);

//отправка данных на почту

if(mail(" uceba5258@gmail.com ",
"Новое письмо с сайта",
"Имя: ".$name."\n".
"E-mail: ".$email."\n".
"Телефон: ".$phone."\n".
"Отзыв: ".$message."\n",
"From: no-reply@mydomain.ru \r\n")

) {

$redirect = isset($_SERVER['HTTP_REFERER'])? $_SERVER['HTTP_REFERER']:'index.html';
header("Location: $redirect");
exit();

}

else {

$redirect = isset($_SERVER['HTTP_REFERER'])? $_SERVER['HTTP_REFERER']:'index.html';
header("Location: $redirect");
exit();

}

?>

По дате
По рейтингу
Аватар пользователя
Просветленный
1
 if(!isset($_POST['message']))die('не заполнено поле "сообщение", отправка не возможна') 
Аватар пользователя
Ученик

спасибо большое, осталась одна ошибка. которая в 39 строке. не знаете что это может быть?

Аватар пользователя
Ученик

отмена, всё заработало. спасибо большое! дай бог здоровья

Аватар пользователя
Гений
1234
 $name = urldecode($name); //декодирование URL  
$email = urldecode($email);  
$phone = urldecode($phone);  
$message = urldecode($message);  

Зачем тебе их тут URL-декодировать? Это не надо делать, значения в массиве $_POST уже декодированы на этапе формирования этого массива.
Тем более, декодирование в этом месте сломает весь смысл вызова функции htmlspecialchars, которая вызывается выше, потому как злоумышленник сможет обойти эту функцию, передав URL-закодированные спецсимволы, которые в закодированном виде функция htmlspecialchars не увидит и не нейтрализует.

Аватар пользователя
Ученик

Логируйте, что отправляется.
из документации(как вариант):

Каждая строка должна быть отделена символом CRLF (\r\n).


Если сообщения не отправляются, попробуйте использовать только LF (\n). Некоторые агенты пересылки сообщений Unix (особенно » qmail) автоматически заменяют LF на CRLF (что приводит к двойному CR, если использовалось CRLF). Используйте эту меру в крайнем случае, так как это нарушает » RFC 2822.



Видео по теме