Форма расчета стоимости услуг (отправка по email)

Статус
Закрыто для дальнейших ответов.

Volodymyr Rudejchuk

Новичок
Регистрация
23.09.2012
Сообщения
2
Доброго времени суток.


Есть скачанный с интернета скрипт - расчета стоимости. В скрипте, есть форма для отправки подсчитанного заказа и обратной связи. Проблема в том что, на заданный email отправляется только информация (фио, email, номер телефона и т д...) то есть, контактная информация, которую вводит пользователь в форму обратной связи, а подсчет и сам заказ не отправляется.

Сама форма выглядит так:



Вот форма на сервере:
http://uabs.ca/raschet_saita/index.htm

а вот sendmail.php

Код:
<?
/*========================================
* Расчет стоимости сайта v1.0.
* http://www.web.vkstoi.ru
*
* 2008 г.
========================================*/
$myemail = "*****@gmail.com";
$refreshpage = "index.htm";
$maxname = "50";
$maxmsg = "500";
$maxtel = "15";
$shapka="<html><head><META http-equiv=Content-Type content='text/html; charset=windows-1251'></head><body>";
$back="<center>Вернитесь <a href='javascript:history.back(1)'><B>назад</B></a>";
$maxkey=4;
if (!isset($_POST['name'])) {print"$shapka $back Вы не указали свое имя!";} else {$name=$_POST['name'];}
if (!isset($_POST['email'])) {print"$shapka $back Вы не ввели емайл!";} else {$email=$_POST['email'];}
if ($name=="" || strlen($name)>$maxname) {print "$shapka $back Вы не ввели имя, или вввели слишком длинное имя!</B></center>"; exit;}
if(!preg_match("/^[а-яА-Я]/", $_POST['name']) or $_POST['name']=="") {print "$shapka $back и введите корректные символы (например: вася,петя)!</B></center>"; exit;}
if(!preg_match("/^[a-z0-9\.\-_]+@[a-z0-9\-_]+\.([a-z0-9\-_]+\.)*?[a-z]+$/is", $_POST['email']) or $_POST['email']=="") {print "$shapka $back и введите корректный E-mail адрес!</B></center>"; exit;}
$host=$_SERVER["HTTP_HOST"]; $self=$_SERVER["PHP_SELF"]; $smailurl="http://$host$self";
$date=date("d.m.Y"); // число.месяц.год
$time=date("H:i:s"); // часы:минуты:секунды
// Настройки для отправки писем
$headers=null;
$headers.="Content-Type: text/html; charset=windows-1251\r\n";
$headers.="From: ".$name." <".$company.">\r\n";
$headers.="X-Mailer: PHP/".phpversion()."\r\n";
// Собираем всю информацию в теле письма
$allmsg="<html><head><meta http-equiv='Content-Type' content='text/html; charset=windows-1251'>
<style>BODY {FONT-FAMILY: verdana,arial,helvetica; FONT-SIZE: 13px;} TD {FONT-SIZE: 12px;}</style></head>
<body><center><h4><font color='#FF9900'>Сообщение от посетителя сайта \"<B><a href='$smailurl'><font color='#233C3B'>$smailurl</font></a></B>\"</h4>
<table border=1 cellpadding=6 cellspacing=0 width=500 bordercolor='#DBDBDB'>
<tr><td colspan=2 align=center><b>Информация</b></td></tr>
<tr><td width=117>Имя:</td><td width=433><B>$name</B></td></tr>
<tr><td>E-Mail:</td><td><B>$email</B></td></tr>
<tr><td>Компания:</td><td><B>$company</B></td></tr>
<tr><td>Дата отправки:</td><td><small>$time</small> - $date г.</td></tr>
<tr><td>Должность:</td><td><B>$dolg</B></td></tr>
<tr><td>Телефон:</td><td><B>$telefon</B></td></tr>
<tr><td>Ваши пожелания:</td><td><B>$gelanie</B></td></tr>
</table><center><BR>Ваше сообщение<B><font color='#233C3B'>успешно отправлено</font></B><BR><BR>
<a href='$refreshpage'><font color='#FF9900'>Вернуться <B><font color='#233C3B'>назад</B></font></a>";
$printmsg="$allmsg </body></html>";
$allmsg.="<BR><BR><BR>* Это сообщение сгенерировано и отправлено роботом с формы обратной связи. Отвечать на него не нужно.</body></html>";
mail("$myemail", "Обратная связь. Сообщение от $name", $allmsg, $headers);
// Пишем пользователю "Спасибо" и обновляем страницу через Javascript
print "<script language='Javascript'>function reload() {location = \"$refreshpage\"}; setTimeout('reload()', 5000);</script>$printmsg";


?>

Прошу помочь. Кто чем сможет ;)
 

mrlasking

$_GET['rich'] or die('trying');
Регистрация
22.05.2012
Сообщения
323
Код:
<tr><td>Должность:</td><td><B>$dolg</B></td></tr>
<tr><td>Телефон:</td><td><B>$telefon</B></td></tr>
<tr><td>Ваши пожелания:</td><td><B>$gelanie</B></td></tr>
ну а где у вас в коде идет присвоение этих, например, переменных? Где производятся расчеты и куда они передаются? Логично, что у вас не работает форма. Отправляется только то, что вы присвоили.
 

Volodymyr Rudejchuk

Новичок
Регистрация
23.09.2012
Сообщения
2
Код:
<tr><td>Должность:</td><td><B>$dolg</B></td></tr>
<tr><td>Телефон:</td><td><B>$telefon</B></td></tr>
<tr><td>Ваши пожелания:</td><td><B>$gelanie</B></td></tr>
ну а где у вас в коде идет присвоение этих, например, переменных? Где производятся расчеты и куда они передаются? Логично, что у вас не работает форма. Отправляется только то, что вы присвоили.
Расчеты производятся яваскриптом. А как присвоить эти переменные?
 

Volter9

defined('SURRENDER') or die(); // StarWars
Регистрация
27.05.2012
Сообщения
1 145
Ну и говнокодище :wacko:
Советую использовать PHPMailer: http://sourceforge.net/projects/phpmailer/
А также пример, как его использовать: http://progger.ru/2009/07/phpmailer-otpravka-pisem-cherez-smtp/
 

CamaroSS

Well-Known Member
Регистрация
21.02.2012
Сообщения
176
[member=mrlasking], возможно, автор полагался на register_globals, а он отключен.
 

mrlasking

$_GET['rich'] or die('trying');
Регистрация
22.05.2012
Сообщения
323
[member=CamaroSS], если б полагался, то, в начале кода, было бы что-то вроде "global $telefon;" это как минимум;) Во-вторых, ТС уже ответил, что расчеты на скриптах.

[member=Volodymyr Rudejchuk], Передавайте тогда результаты массивом, ну или любым другим понравившимся способом, но у вас нету присвоения этих переменных.

[member=Volter9], согласен;)
 

CamaroSS

Well-Known Member
Регистрация
21.02.2012
Сообщения
176
[member=mrlasking], не, не обязательно. Если Javascript всё рассчитывает и отправляет POST'ом на скрипт, то при включенном register_globals появится такая дрянь как $telefon = $_POST['telefon'], $name = $_SESSION['name'] и т.п. Вот мою тему про register_globals рано закрыли - я б рассказал ещё о том, как некоторые индивидуумы пользуются этим при загрузке файлов, юзают в коде что-нибудь типа $REQUEST_URI или $HTTP_HOST, и не уследишь, пока где-нибудь что-нибудь не сломается))) Кстати ключевое слово global с этой опцией никак не связано.
Так вот если дело в этом, то можно провести в начала скрипта частичную эмуляцию register_globals типа
Код:
foreach($_POST as $key => $value)
{
    $$key = $value;
}
[member=Volter9], и то верно, хоть и не по теме.
 

mrlasking

$_GET['rich'] or die('trying');
Регистрация
22.05.2012
Сообщения
323
[member=CamaroSS], omg, omg,omg! Я аж перекрестился, пару раз, ваш пост прочитав.... Брррр!!!! Не пишите такого больше.

1."Для того, что б что-то куда-то передать, нужно что-то куда-то записать" (с) Переделываем простоквашино. Переменная $telefon в файле sendmail.php из воздуха не возьмется, ее для начала нужно присвоить, о чем я и сказал в своем посте предыдущем.

2.
Код:
foreach($_POST as $key => $value)
{
    $$key = $value;
}
вот такую бяку один раз написали, и больше не повторяйте - карма портится от такого и гастрит начнется. Если уж так приспичит выкинуть весь $_POST в переменные соответствующие (что тоже зачастую - быдлокод) то используйте уже extract() и будет вам счастье.
 

CamaroSS

Well-Known Member
Регистрация
21.02.2012
Сообщения
176
Так вот register_globals действует так же безжалостно. Но тут скрипт небольшой и проще нормально присвоить значения, заодно проверив правильность входных данных.
 

mrlasking

$_GET['rich'] or die('trying');
Регистрация
22.05.2012
Сообщения
323
[member=CamaroSS], хватит уже танцевать на теме register_globals, уже все поняли, что это ваша любимая болезненная мозоль. У ТС-а проблемы не с ним.

[member=Volodymyr Rudejchuk], Владимир, на этой странице после подсчета стоимости сайта, у вас генерируется код формы для отправки в файл sendmail.php. Проблема в том, что в форме нигде не указано значение итоговой суммы заказа.

Могу предложить вам следующий алгоритм действий:
1. Упростите проверку формы, для этого есть много более грамотных вариантов, чем проверки через if-ы.
2. В генерируемую форму можно встроить минимум два инпута скрытых (input type=hidden) первый - для сериализованного массива отмеченных пожеланий, второй - для итоговой стоимости заказа.
3. При получении скриптом sendmail.php допишите присвоение всех используемых переменных, это как минимум. Подучитесь и будете смотреть на свой код с улыбкой;)


[offtop]
Отдельно, меня, конечно, интересует, какое же вы пишете для пользователей "Ядро системы" и прочие модули, если с формой связи такие проблемы... Но это уже здоровый цинизм и толика троллинга ;)
[/offtop]
 
Статус
Закрыто для дальнейших ответов.
Верх Низ