X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

3 страниц V   1 2 3 >
Открыть тему
Тема закрыта
> Форма обратной связи, Настраиваю - не работает
Matt
Matt
Topic Starter сообщение 7.11.2010, 14:51; Ответить: Matt
Сообщение #1


Я в php пока совсем не силён, но пытаюсь модифицировать под себя один скрипт обратной связи. Смысл в том, что надо добавить ещё строки для заполнения. Вот исходный скрипт, который отлично работает:
[php]<?php
$your_email = "----@mail.ru";
if (isset($_POST['autor'])) { $autor = $_POST['autor']; if ($autor == '') { unset($autor);} }
if (isset($_POST['email'])) { $email = $_POST['email']; if ($email == '') { unset($email);} }
if (isset($_POST['title'])) { $title = $_POST['title']; if ($title == '') { unset($title);} }
if (isset($_POST['message'])) { $message = $_POST['message']; if ($message == '') { unset($message);} }
if (empty($autor) or empty($email) or empty($title) or empty($message)) { die ("Не все поля заполнены! <a href=\"java script:history.back()\">Назад</a>"); }
if (!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email)) { die ("Неверно введен е-mail! <a href=\"java script:history.back()\">Назад</a>"); }
$autor = addslashes($autor);
$email = addslashes($email);
$title = addslashes($title);
$message = addslashes($message);
$headers = "Content-type: text/html; charset=UTF-8 \r\n";
$headers .= "From: $autor <$email>\r\n";
if (mail($your_email, $title, $message, $headers)) {
echo ("Письмо отправлено!"); }
else {echo ("Ошибка, письмо не удалось отправить!");}
?>[/php]

А вот этот, с добавленной строкой, работать не желает:
[php]<?php
$your_email = "-----@mail.ru";
if (isset($_POST['autor'])) { $autor = $_POST['autor']; if ($autor == '') { unset($autor);} }
if (isset($_POST['email'])) { $email = $_POST['email']; if ($email == '') { unset($email);} }
if (isset($_POST['title'])) { $title = $_POST['title']; if ($title == '') { unset($title);} }
if (isset($_POST['poroda'])) { $poroda = $_POST['poroda']; if ($poroda == '') { unset($poroda);} }
if (isset($_POST['message'])) { $message = $_POST['message']; if ($message == '') { unset($message);} }
if (empty($autor) or empty($email) or empty($title) or empty($poroda) or empty($message)) { die ("Не все поля заполнены! <a href=\"java script:history.back()\">Назад</a>"); }
if (!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email)) { die ("Неверно введен е-mail! <a href=\"java script:history.back()\">Назад</a>"); }
$autor = addslashes($autor);
$email = addslashes($email);
$title = addslashes($title);
$poroda = addslashes($poroda);
$message = addslashes($message);
$headers = "Content-type: text/html; charset=UTF-8 \r\n";
$headers .= "From: $autor <$email>\r\n";
if (mail($your_email, $title, $poroda, $message, $headers)) {
echo ("Письмо отправлено!"); }
else {echo ("Ошибка, письмо не удалось отправить!");}
?>[/php]

Код html (модифицированный, отображается нормально):

<p>
<style type="text/css">
input, textarea {
border: 1px solid;
} </style>
</p>
<form action="check_feedback.php" method="post">
<lable>Имя:</lable><br />
<input name="autor" type="text" /><br />
<lable>Email:</lable><br />
<input name="email" type="text" /><br />
<lable>Тема:</lable><br />
<input name="title" type="text" /><br />
<lable>Порода:</lable><br />
<input name="poroda" type="text" /><br />
<lable>Сообщение:</lable><br />
<textarea name="message"></textarea><br />
<br />
<input name="send" type="submit" value="Отправить" />&nbsp;</form>

Помогите разобраться, очень надо.


--------------------
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Matt
Matt
Topic Starter сообщение 7.11.2010, 15:02; Ответить: Matt
Сообщение #2


Всё, разобрался! Так и не понял, почему сначала не отображалось).
Но теперь другой вопрос, как сделать, чтобы полсе вывода сообщения "Письмо отправлено" пользователь автоматом возвращался назад.


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 7.11.2010, 15:14; Ответить: ZiTosS
Сообщение #3


Matt, ещё бы она работала, почитай про функции и параметры функций
Функция mail():
bool mail (string to, string subject, string message [, string additional_headers [, string additional_parameters]])

mail() автоматически отправляет сообщение message получателю to. Можно специфицировать несколько получателей, разделив запятой адреса в to. С помощью этой функции можно высылать Email с присоединением/attachment и содержимое специальных типов. Это делается через MIME-кодировку - см. дополнительно эту статью о Zend или PEAR Mime Classes.

to - адресат, кому отправляем письмо
subject - тема письма
message - сообщение письма (текст ил может быть HTML)
additional_headers (необязательный параметр) - определение заголовков письма (например, нужен для прикрепления attach или отправки письма как HTML)
additional_parameters (необязательный параметр) - можно использовать для передачи дополнительных параметров программе, сконфигурированной для использования при отправке почты установкой конфигурации и др.

Разберем твои примеры:
1) было
[php]mail($your_email, $title, $message, $headers)[/php]
отправляем по email $your_email
тема письма $title
сообщение письма $message
заголовки письма $headers

2) стало
[php]mail($your_email, $title, $poroda, $message, $headers)[/php]
отправляем по email $your_email
тема письма $title
сообщение письма $poroda
заголовки письма $message
различные параметры для сервера $headers

Как видишь, у тебя в функцию отправляется в качестве параметров не то что нужно. Заголовки имеют чётко определенный формат, и если ты пошлешь вместо них какую-либо лабуду, как у тебя - посылается $poroda, то письмо не отправится.

Если ты хочешь добавить к сообщению ещё и породу кошки или ещё кого-либо надо делать так:
[php]<?php
$your_email = "-----@mail.ru";
if (isset($_POST['autor'])) { $autor = $_POST['autor']; if ($autor == '') { unset($autor);} }
if (isset($_POST['email'])) { $email = $_POST['email']; if ($email == '') { unset($email);} }
if (isset($_POST['title'])) { $title = $_POST['title']; if ($title == '') { unset($title);} }
if (isset($_POST['poroda'])) { $poroda = $_POST['poroda']; if ($poroda == '') { unset($poroda);} }
if (isset($_POST['message'])) { $message = $_POST['message']; if ($message == '') { unset($message);} }
if (empty($autor) or empty($email) or empty($title) or empty($poroda) or empty($message)) { die ("Не все поля заполнены! <a href=\"java script:history.back()\">Назад</a>"); }
if (!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email)) { die ("Неверно введен е-mail! <a href=\"java script:history.back()\">Назад</a>"); }
$autor = addslashes($autor);
$email = addslashes($email);
$title = addslashes($title);
$poroda = addslashes($poroda);
$message = addslashes($message);
$message = "порода .... - {$poroda} Сообщение:" . $message;

$headers = "Content-type: text/html; charset=UTF-8 \r\n";
$headers .= "From: $autor <$email>\r\n";
if (mail($your_email, $title, $message, $headers)) {
echo ("Письмо отправлено!"); }
else {echo ("Ошибка, письмо не удалось отправить!");}
?>[/php]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 7.11.2010, 15:23; Ответить: ZiTosS
Сообщение #4


Matt, почитай первое сообщение
Всё, разобрался! Так и не понял, почему сначала не отображалось).
Но теперь другой вопрос, как сделать, чтобы полсе вывода сообщения "Письмо отправлено" пользователь автоматом возвращался назад.

А по поводу данного вопроса:
Возникает вопрос - а куда назад? Если на четко определенную страницу, то можно либо meta refresh либо в начале кода поставить ob_start() а в конце использовать header location
Если пользователь может отправлять письма не только с одной страницы, к примеру mail.php, а надо его вернуть на ту страницу, откуда он отправил, то:
Элемент $_SERVER['HTTP_REFERER']

В элементе $_SERVER['HTTP_REFERER'] приводится адрес страницы, с которой посетитель пришёл на данную страницу.


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Matt
Matt
Topic Starter сообщение 7.11.2010, 15:50; Ответить: Matt
Сообщение #5


Вопрос с редиректом решил, включив вот такую штуку: [php]<?php
header('Refresh: 3; URL=http://------.html');
echo 'Через 3 сек. вы будете перенаправлены на новую страницу.';
exit;
?>[/php]

Но вот незадача, поправил, как ты сказал, и сообщение нормально выводится, всё работает, но не отображается тема и адрес отправителя письма.


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 7.11.2010, 16:04; Ответить: ZiTosS
Сообщение #6


Matt, код в студию
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Matt
Matt
Topic Starter сообщение 7.11.2010, 16:08; Ответить: Matt
Сообщение #7


[php]<?php
$your_email = "-----@mail.ru";
if (isset($_POST['autor'])) { $autor = $_POST['autor']; if ($autor == '') { unset($autor);} }
if (isset($_POST['email'])) { $email = $_POST['email']; if ($email == '') { unset($email);} }
if (isset($_POST['title'])) { $title = $_POST['title']; if ($title == '') { unset($title);} }
if (isset($_POST['poroda'])) { $poroda = $_POST['poroda']; if ($poroda == '') { unset($poroda);} }
if (isset($_POST['message'])) { $message = $_POST['message']; if ($message == '') { unset($message);} }
if (empty($autor) or empty($email) or empty($title) or empty($poroda) or empty($message)) { die ("Не все поля заполнены! <a href=\"java script:history.back()\">Назад</a>"); }
if (!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email)) { die ("Неверно введен е-mail! <a href=\"java script:history.back()\">Назад</a>"); }
$autor = addslashes($autor);
$email = addslashes($email);
$title = addslashes($title);
$poroda = addslashes($poroda);
$message = addslashes($message);
$message = "порода - {$poroda} Сообщение:" . $message;
$headers = "Content-type: text/html; charset=UTF-8 \r\n";
$headers .= "From: $autor <$email>\r\n";
if (mail($your_email, $title, $message, $headers)) {
echo ("Письмо отправлено! "); }
else {echo ("Ошибка, письмо не удалось отправить! ");}
?><?php
header('Refresh: 3; URL=http:----.html');
echo 'Через 3 сек. вы будете перенаправлены на новую страницу.';
exit;
?>[/php]


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 7.11.2010, 16:34; Ответить: ZiTosS
Сообщение #8


Matt, аа до этого всё было нормально, и где ты письма просматриваешь?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Matt
Matt
Topic Starter сообщение 7.11.2010, 16:35; Ответить: Matt
Сообщение #9


Нашёл ещё одну причину - кодировка. Поэтому русское имя отправителя и не приходило. Поправил на UTF-8 на Windows-1251, но в итоге появились всякие левые символы. Как же быть?


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 7.11.2010, 16:50; Ответить: ZiTosS
Сообщение #10


Matt, зачем ты письмо пытаешься отправить в UTF-8? Да и вообще тебе нужен HTML-формат письма? Обычно письма отправляются в koi8r делается это так:
[php]$title = convert_cyr_string($title, 'w', 'k');[/php]
А все дело в том, что для почты у нас принято использовать кодировку koi8-r, а для веба - win-1251 (ansi) - так, и выходит - мы шлем с сайтов в win-1251, а почтовые программы открывают его как koi8-r...

k koi8-r
w win-1251
i iso8859-5
a x-cp866
d x-cp866
m x-mac-cyrillic
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
3 страниц V   1 2 3 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыПринимаю заказы на копирайтинг, рерайтинг. Стабильно работаю, всегда на связи
Нужен автор текстов, копирайтер? Обращайтесь
14 KriptoFin 8015 22.9.2020, 18:07
автор: mrSana
Открытая тема (нет новых ответов) Нужен простой лендинг с формой обратной связи
10 Kuzzma 2561 11.9.2020, 21:33
автор: Kuzzma
Открытая тема (нет новых ответов) Настройка каптчи на форму обратной связи
3 woolf 2030 9.4.2019, 17:21
автор: bobur
Открытая тема (нет новых ответов) Спам через форму обратной связи на сайте
14 Evgeniy3200 8082 15.5.2017, 20:53
автор: samvel32453
Открытая тема (нет новых ответов) Требуется доработка формы заказа/обратной связи
0 Dinamitt 1796 22.2.2017, 22:02
автор: Dinamitt


 



RSS Текстовая версия Сейчас: 29.3.2024, 3:33
Дизайн