- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Как снизить ДРР до 4,38% и повысить продажи с помощью VK Рекламы
Для интернет-магазина инженерных систем
Мария Лосева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Добрый день!
На сайте есть простая форма обратной связи, выполнение которой идет в скрипте
<form action="mail.php" method="post" name="mailer">
Введите ваше имя <input type="text" name="name" value=""><br><br>
Введите название вашей организации: <input type="text" name="org" value=""><br><br>
Введите тему письма: <br><input type="text" name="tema" value=""><br><br>
Введите ваш e-mail: <input type="text" name="mail" value=""><br><br>
<input type=submit value=" отправить " onClick="return FormSubmit()">
<input TYPE=reset VALUE=" очистить поля ">
</form>
В скрипте не передаются данные с формы посредством $_POST['']; например:
<?
$name = $_POST['name'];
$org = $_POST['org'];
$mail = $_POST['email'];
$tema = $_POST['tema'];
$to = "почта@mail.ru";
$mess = "С сайта www.сайт.ru было отправлено сообщение";
echo mail($to, $tema, $mess,
"From: $mail
Content-Type: text/plain; charset=windows-1251
Content-Transfer-Encoding: 8bit"
);
?>
если данные вбиты явно, то есть как с параметрами $to и $mess - то они передаются и письмо приходит с сайта.
А если данные передаются к параметрам $name, $mail, $org, &tema с форм, то письмо вообще не приходит с сайта.
В чем может быть причина? И можно как иным способом можно получить данные с форм?
Что за функция
Все переменный должны быть объявленный если они не переданы, либо проверятся на пустоту если они обязательны.
$name = isset($_POST['name']) ? $_POST['name'] : '';
$org у вас вобще нигде не учитывается, все обязательные поля в ф-ю mail должны быть проверены, у вас дырявая отправка с вышей формы могут спамить, и много чего еще надо сделать
я привел только часть формы, параметр $org не надо учитывать
функция onClick="return FormSubmit()" - скрипт проверки заполненности форм
более интересует, почему
если данные вбиты явно, то есть как с параметрами $to и $mess - то они передаются и письмо приходит с сайта.
А если данные передаются к параметрам $name, $mail, $org, &tema с форм, то письмо вообще не приходит с сайта.
покажите полностью содержимое mail.php
а также функцию FormSubmit()
Полнастью скрипт надо увидеть, если вы копировали от туда то у вас уже ошибка
Все заработало на ура. Но есть одно но. Полученное письмо в графе "От" не содержит e-mail отправителя, стоит ящик хостера. Была беседа с хостером на эту тему, он привел пример, где параметр $headers имеет заданный e-mail и функция mail() имеет запись:
mail($to, $tema, $mess,
"From: почта@почта.ru
Content-Type: text/plain; charset=windows-1251
Content-Transfer-Encoding: 8bit"
);
В этом случае в полученном письме в графе "От" стоит e-mail отправителя. Что необходимо сделать, чтобы передавался e-mail отправителя в скрипте ниже:
Скрипт проверки заполненности полей (он работает верно)
<script>
function FormSubmit()
{
var form = document.forms[0];
var name = form.name.value;
var email = form.email.value;
var tlf = form.tlf.value;
var tema = form.tema.value;
var controlnum = form.controlnum.value;
var contt = form.contt.value;
if (name == "") {window.alert("Ваше имя не введено"); return false;}
if (email == "") {window.alert("Ваш e-mail не введен"); return false;}
if (tlf == "") {window.alert("Введите номер телефона"); return false;}
if (tema == "") {window.alert("Тема не введена"); return false;}
if (controlnum != "159035") {window.alert("Введите правильно контрольное число"); return false;}
if (contt == "") {window.alert("Сообщение не должно быть пустым"); return false;}
return true;
}
</script>
Форма отправки сообщения
<form action="post.php" method="post" name="mailer">
Введите ваше имя: <br><input type="text" name="name" value="">
Введите название вашей организации: <br><input type="text" name="org" value="">
Введите ваш e-mail: <br><input type="text" name="email">
Введите ваш телефон: <br><input type="text" name="tlf" value="">
Введите тему письма: <br><input type="text" name="tema" value="">
Контрольное число: <br><input type="text" name="controlnum" value="">
Введите текст письма: <br><textarea name="contt" cols="60" rows="7"></textarea>
<input type=submit value=" отправить " onClick="return FormSubmit()">
<input TYPE=reset VALUE=" очистить поля ">
</form>
Код post.php:
<?
if (isset($_POST['name'])) {$name = $_POST['name'];}
if (isset($_POST['org'])) {$org = $_POST['org'];}
if (isset($_POST['email'])) {$email = $_POST['email'];}
if (isset($_POST['tlf'])) {$tlf = $_POST['tlf'];}
if (isset($_POST['tema'])) {$tema = $_POST['tema'];}
if (isset($_POST['contt'])) {$contt = $_POST['contt'];}
$to = "почта@mail.ru";
$mess = "С сайта www.сайт.ru было отправленно сообщение.
Имя отправителя - $name;
Организация отправителя - $org;
e-mail отправителя - $email;
телефон отправителя - $tlf;
Сообщение:
$contt";
$headers = 'Content-type: text/plain; charset="windows-1251"';
$headers .= "From: <" . $email . "> ";
$headers .= "Return-path: <" . $email . "> ";
mail($to, $tema, $mess, $headers);
echo ('<html><head>
<meta http-equiv="content-type" content="text/plain; charset=windows-1251">
<meta http-equiv="refresh" content="0; url=feedback.html">
</head></body></html>');
?>
$headers = "Content-type: text/plain; charset="windows-1251\r\n"';
$headers .= "From: $email\r\n";
$headers .= "Return-path: $email\r\n";
\r - спец.символ в ПХП - возврат коретки.
\n - тоже спец символ - перенос строки.
Так вот, наш ENTER по разному "обозначается" в Win и *Nix системах.
\r\n - Windows
\n - *nix-системы
Попробуйте по разному, если не знаете что за ОС на Вашем сервере.
ЗЫ. взято из мануала по ПХП.
Замечание: When sending mail, the mail must contain a From header. This can be set with the additional_headers parameter, or a default can be set in php.ini.
Когда отправляется письмо, оно должно содержать заголовок FROM, либо же это можно установить в PHP.INI по умолчанию.
$headers = "Content-type: text/plain; charset="windows-1251\r\n"';
$headers .= "From: $email\r\n";
$headers .= "Return-path: $email\r\n";
\r - спец.символ в ПХП - возврат коретки.
\n - тоже спец символ - перенос строки.
Так вот, наш ENTER по разному "обозначается" в Win и *Nix системах.
\r\n - Windows
\n - *nix-системы
Попробуйте по разному, если не знаете что за ОС на Вашем сервере.
ЗЫ. взято из мануала по ПХП.
Замечание: When sending mail, the mail must contain a From header. This can be set with the additional_headers parameter, or a default can be set in php.ini.
Когда отправляется письмо, оно должно содержать заголовок FROM, либо же это можно установить в PHP.INI по умолчанию.
спасибо за подсказку, но не сработало
Тогда обратитесь к хостеру, и скажите, что не получается.
У меня такое тоже было.
Видимо дефолтное значение в PHP.INI имеет больший вес, чем то что Вы указываете.
Утверждать не буду, но как показала практика, не со всех хостингов можно свой заголовок FROM передавать. Где-то получается, а где-то подставляется адрес хостинга.
Попробуйте написать хостеру об этой проблеме. Как решится - отпишите в теме. Интересно.
такая проблема у меня была с nic.ru. с ними проблема была решена очень просто, в ручную в панели управления хостинга добавил адреса получателей писем в доверительный список и все заработало.
а с 1gb.ru - проблема...
Заменить на