Jump to content
  • 0

Форма обратной связи


rus
 Share

Question

Почему сообщение дублируется когда приходит на мыло?

<?

$date = date("d/m/Y");

$to = array(
'1' => 'test@test.ru');

session_start();
session_register("sn");

$_POST['name'] = substr(htmlspecialchars(trim($_POST['name'])), 0, 60);
$_POST['email'] = substr(htmlspecialchars(trim($_POST['email'])), 0, 30);
$_POST['tel'] = substr(htmlspecialchars(trim($_POST['tel'])), 0, 20);
$_POST['country1'] = substr(htmlspecialchars(trim($_POST['country1'])), 0, 30);
$_POST['country2'] = substr(htmlspecialchars(trim($_POST['country2'])), 0, 30);
$_POST['date1'] = substr(htmlspecialchars(trim($_POST['date1'])), 0, 10);
$_POST['date2'] = substr(htmlspecialchars(trim($_POST['date2'])), 0, 10);
$_POST['message'] = substr(htmlspecialchars(trim($_POST['message'])), 0, 1000);

if (empty($_POST['name']) or strlen($name) < 0)
{
echo
'<p>Вы не указали свои инициалы.

Пожалуйста, укажите ваше имя и фамилию!
</p>';
}

{
if(!preg_match("/[0-9a-z_]+@[0-9a-z_^.]+.[a-z]{2,3}/i", $_POST['email']))
echo
'<p>Email не был указан, или указан некорректный email.

Пожалуйста, укажите правильный email, это необходимо для связи с вами!
</p>';
}

if (empty($_POST['tel']) or strlen($tel) < 0)
{
echo
'<p>Вы не указали свой номер телефона.

Пожалуйста, укажите номер телефона, это необходимо для связи с вами!
</p>';
}

if ($_SERVER["REQUEST_METHOD"]=="POST") {
$error=0;
if ($_POST["secretcode"]!=$_SESSION["sc"] ||
intval($_POST["secretcode"])==0) $error=1;

if ($error==0) {
$_SESSION["secret_number"]=rand(1000,9999);

$toMail = $to[$_POST['to']];

$text = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Сообщение от '. $name . '</title>
<style media="screen" type="text/css">

table {
padding:5px;
margin:5px;
border:#E2E2E2 solid 2px;
width:500px;
}

td {
border:#E2E2E2 solid 1px;
width:100px;
padding:5px;
margin:5px;
}

body {
margin: 0;
padding: 6px;
border: 0;
background: #fff;
}
</style>
</head>
<body>
<table>
<tr>
<td colspan="2">ФИО отправителя: ' . $name = str_replace("n", "
", $name) . '</td>
</tr>
<tr>
<td colspan="2">Email отправителя: ' . $email = str_replace("n", "
", $email) . '</td>
</tr>
<tr>
<td colspan="2">Телефон отправителя: ' . $tel = str_replace("n", "
", $tel) . '</td>
</tr>
<tr>
<td colspan="2">Город куда лететь: ' . $country1 = str_replace("n", "
", $country1) . '</td>
</tr>
<tr>
<td colspan="2">Город откуда лететь: ' . $country2 = str_replace("n", "
", $country2) . '</td>
</tr>
<tr>
<td colspan="2">Дата вылета туда: ' . $date1 = str_replace("n", "
", $date1) . '</td>
</tr>
<tr>
<td colspan="2">Дата вылета обратно: ' . $date2 = str_replace("n", "
", $date2) . '</td>
</tr>
<tr>
<td colspan="2">Тип места: ' . $mesto . '</td>
</tr>
<tr>
<td colspan="2">Количество взрослых: ' . $vzrosl . '</td>
</tr>
<tr>
<td colspan="2">Количество молодежи: ' . $molodez . '</td>
</tr>
<tr>
<td colspan="2">Количество детей до 2-х лет: ' . $kind1 . '</td>
</tr>
<tr>
<td colspan="2">Количество детей до 12-ти лет: ' . $kind2 . '</td>
</tr>
<tr>
<td colspan="2">Комментарии к заказу: ' . $message = str_replace("n", "
", $message) . '</td>
</tr>
<tr>
<td><div style="line-height: 30px;">Дата отправки заказа: (' . $date . ')</div></td>
</tr>
</table>
</body>
</html>';

mail ($toMail, "$subject", "$text", "MIME-Version: 1.0n".
"Content-type: text/html; charset=windows-1251n".
'From: ' . $name . ' ');
print 'Сообщение успешно отправлено

<a href="java script:history.back(1)">Вернуться назад</a>';
exit;
}

if ($error==1)
print 'Число введено неверно

<a href="java script:history.back(1)">Вернуться назад</a>';
}
?>

P.S. в php еще пока не сильно рублю, но 90 процентов написанного понимаю, т.к. половину наверное этого кода сам дорабатывал под свои нужды, а вот оставшиеся 10 процентов не понимаю, а именно, почему оно приходит продублированным?

Link to comment
Share on other sites

Recommended Posts

  • 0

А что вы имеете ввиду? На сайте обычная форма, с каптчей, а в обработчике прописан емаил куда отправляется сообщение. Но вот приходит на маил в таком виде: сначала идет как простой текст инфа из полей заполненая на сайте, а ниже она же, только в таблице как и задумано. Вот как убрать ту инфу, что не в таблице?

Link to comment
Share on other sites

  • 0

А на какой ящик отсылаешь?

Некоторые бесплатные почтовики сначала читают как текст. а ниже показывают html. Ровно также они показывают картинку, а ниже е? пиктограмка.

Link to comment
Share on other sites

  • 0

Ну не может быть чтобы нельзя было как-то решить эту проблему, наверняка у кого-нибудь есть ключ к решению этой задачи! Да и к тому же я не прошу за меня е? решать, мне бы только намекнуть, или ссылочку на инфу, если конечно проблема не в самом коде...

Link to comment
Share on other sites

  • 0

Во-первых, я здесь не так уж и часто задаю вопросы, а это о ч?м-то да говорит. Во-вторых, я не клянчаю, а вам бы научиться правильно выражаться. Ну и в-третьих, чтобы пофлудить есть раздел для этого-флейм. Если есть что по существу говорить, так я во внимании, а если нет, так проходите как говорится мимо.

Link to comment
Share on other sites

  • 0
Подставь в форму мой ящик - dimitry gav wolotko dot ru - посмотрим что прид?т.

Ок, попробую...

Только вот попытался зайти на ftp, не пускают, видимо на сервере у них проблемы. Попробую еще завтра, хорошо?

Link to comment
Share on other sites

  • 0
Ты че развонялся?

Ты че так разговариваешь, а? Давай обойдемся без прериканий, ок?:|

Готов поспорить, что у тебя на отправляющей кнопке стоит обработчик типо этого:

А в этом ты ошибся, там все как обычно:

Link to comment
Share on other sites

  • 0

Может ява скрипт как-то влияет который перед формой идет?:)

Если в php хоть что-то понимаю, то с ява скриптом вообще темный лес:)

<script language="JavaScript" type="text/javascript">
// Refresh Image
var intImageCounter = 0;
function RefreshImage(CodeFieldFocus) {
document.getElementById("image").src = "feedback/img.php?0.521673" + intImageCounter++;
}

// TextArea MaxLength
var ns6=document.getElementById&&!document.all
function restrictinput(maxlength,e,placeholder){
if (window.event&&event.srcElement.value.length>=maxlength)
return false
else if (e.target&&e.target==eval(placeholder)&&e.target.value.length>=maxlength){
var pressedkey=/[a-zA-Z0-9.,/]/
if (pressedkey.test(String.fromCharCode(e.which)))
e.stopPropagation()
}
}
function countlimit(maxlength,e,placeholder){
var theform=eval(placeholder)
var lengthleft=maxlength-theform.value.length
var placeholderobj=document.all? document.all[placeholder] : document.getElementById(placeholder)
if (window.event||e.target&&e.target==eval(placeholder)){
if (lengthleft<0)
theform.value=theform.value.substring(0,maxlength)
placeholderobj.innerHTML=lengthleft
}
}
function displaylimit(theform,thelimit){
var limit_text='<em>Разрешается ввести не более <span id="'+theform.toString()+'" style="color: #888;">'+thelimit+'</span> символов в форму</em>'

if (document.all||ns6)
document.write(limit_text)
if (document.all){
eval(theform).onkeypress=function(){ return restrictinput(thelimit,event,theform)}
eval(theform).onkeyup=function(){ countlimit(thelimit,event,theform)}
}
else if (ns6){
document.body.addEventListener('keypress', function(event) { restrictinput(thelimit,event,theform) }, true);
document.body.addEventListener('keyup', function(event) { countlimit(thelimit,event,theform) }, true);
}
}
</script>

Link to comment
Share on other sites

  • 0

Да, чтоб более понятно было приходит письмо такого содержания:

ФИО: Иван Иванович Email: test@test.ru телефон: 555-55-55, ну и т.д....

И собственно таблица (в обработчике она есть):

ФИО: Иван Иванович

Email: test@test.ru

телефон: 555-55-55

ну и т.д....

Вот в таком виде, в одном письме.

Попробую поменять на доменную почту, авось получится.

To Dmitriy:

А тот емаил что ты указал, там с нижним подчеркиванием, или через тире?

Link to comment
Share on other sites

  • 0

Проблема так и осталась актуальной :/

А еще если в форме ввести только цифры от каптчи, то выдаст ошибку что не заполнены поля ФИО, емаил и телефон, но все-равно напишет что сообщение успешно отправлено:)

Link to comment
Share on other sites

  • 0

Заменить:

mail ($toMail, "$subject", "$text", "MIME-Version: 1.0n".
"Content-type: text/html; charset=windows-1251n".
'From: ' . $name . ' ');

на

$headers  = "MIME-Version: 1.0n";
$headers .= "Content-type: text/html; charset=windows-1251 rn";
$headers .= "From: Birthday Reminder <birthday@example.com>rn";

mail ($toMail, $subject, $text, $headers);

Ну а $name прикручивай к $headers, к From:

Link to comment
Share on other sites

  • 0
Расскажи потом, что как.

Дим, спасибо тебе просто огромное!!!:)

Все получилось:

$subject= "Заявка на бронирование с сайта ".$_SERVER['SERVER_NAME'];
$from="Администратор";

$headers = "MIME-Version: 1.0n";
$headers .= "Content-type: text/html; charset=windows-1251 rn";
$headers.= "From: $from<avia@".$_SERVER['SERVER_NAME'].">rn";

mail ($toMail, $subject, $text, $headers);

Ну и соответственно "$from" - эта переменная будет в тегах "

"

P.S. вот только единственное что, так это то, что если ввести циферки с каптчи, то обработчик уже не обращает внимание на то что в обязательных полях не введены данные (тоесть он выдает предупреждение), но все-равно отправляет сообщение.

Как бы каптча и инпуты независимы друг от друга, а как их "связать" чтобы они зависимы были?:/

Link to comment
Share on other sites

  • 0
if ($_POST["secretcode"] == $_SESSION["sc"]){
mail(.....
}

Спасибо, вроде как получилось, т.е. отправлять-то отправляет (по крайней мере на локальной машине), и пишет что сообщение успешно отправлено:

if ($_POST["secretcode"] == $_SESSION["sc"]){
mail('test@test.ru');
....
}

Но в тоже время выдает вот такую ошибку:

Warning: mail() expects at least 3 parameters, 1 given in Z:hometestwwwsendmail.php on line 50

Что я не так сделал?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy