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



 

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

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

Открыть тему
Тема закрыта
> Отправка расчетов на почту, нужно помощь
Trizmer
Trizmer
Topic Starter сообщение 28.2.2015, 11:06; Ответить: Trizmer
Сообщение #1


Здравствуйте, делаю небольшой калькулятор по видеонаблюдению. Расчеты все выполняются, теперь мне надо чтобы человек который сделал расчеты мог отправить их себе на почту, для этого внизу я добавил поле ввода мейла и кнопку отправить. Получатель письма тот чей меил введут в поле, а сам текст письма хотел сформировать из тех переменных чтобы были выше в расчетах. Письмо ухадит как надо но там где должны быть переменные из расчетов пусто. Прошу помочь, программист я совсем начинающий.

Вот работающий пример http://aqt.kz/kalk.php
Развернуть/Свернуть
Код
<?php
      echo' <form  method="post" name="form" action="">
      Аналоговые видеокамеры - <input type="checkbox" name="anal" value="Yes" /><br>
      IP видеокамеры - <input type="checkbox" name="ip" value="Yes" /><br>
      HD CCTV видеокамеры - <input type="checkbox" name="hd" value="Yes" /><br>
Внешние камеры - <INPUT TYPE=TEXT NAME="vnesh" SIZE=20   onkeypress="return OnlyNum(event)" id="inpkalk" maxlength="3"> <br>
Внутренние камеры - <INPUT TYPE=TEXT NAME="vnutr" SIZE=20   onkeypress="return OnlyNum(event)" id="inpkalk" maxlength="3">
<input type="submit" value="Рассчитать" style="width: 155px;" id="btkalk" name="submit"></form>';

     if($_POST['submit']) {
       $vnesh = $_POST['vnesh'];
       $vnutr = $_POST['vnutr'];

if ( (isset($_POST['anal']) && $_POST['anal'] == 'Yes') or (isset($_POST['ip']) && $_POST['ip'] == 'Yes') or (isset($_POST['hd']) && $_POST['hd'] == 'Yes')   )
{

      
/* расчет аналоговых */      
if(isset($_POST['anal']) &&
   $_POST['anal'] == 'Yes')
{

$avnesh = $vnesh;
$avnutr = $vnutr;

$akol = $avnesh    + $avnutr;
$avneshcena = 8100;
$avnutrcena = 5500;
$vint = 12200;
$monitor = 18300;
$arash = 7000;
$amontaj = 3000;

$avneshs = $avnesh * $avneshcena;
$avnutrs = $avnutr * $avnutrcena;
$arashs = $akol * $arash;
$amontajs = $akol * $amontaj;

if ($akol < 4) {$areg = 18300;}
elseif ($akol < 8) {$areg = 36000;}
elseif ($akol < 16) {$areg = 50000;}
elseif ($akol < 20) {$areg = 68300;}
elseif ($akol < 24) {$areg = 86000;}
elseif ($akol < 32) {$areg = 100000;}
elseif ($akol < 100000) {$areg = "Индивидуальный расчет";}
else {$aregname = 0;}

if ($akol < 4) {$aregname = "Hikvision DS-7204HFI-SH 4-х канальный";}
elseif ($akol < 8) {$aregname = "Hikvision DS-7208HFI-SH 8-ми канальный";}
elseif ($akol < 16) {$aregname = "Hikvision DS-7216HFI-SH 16-ти канальный";}
elseif ($akol < 20) {$aregname = "Hikvision DS-7216HFI-SH 16-ти канальный и Hikvision DS-7204HFI-SH 4-х канальный";}
elseif ($akol < 24) {$aregname = "Hikvision DS-7216HFI-SH 16-ти канальный и Hikvision DS-7208HFI-SH 8-ми канальный";}
elseif ($akol < 32) {$aregname = "Hikvision DS-7216HFI-SH 16-ти канальный (2 шт.)";}
elseif ($akol < 100000) {$aregname = "Hikvision";}
else {$areg = 0;}

$aitogo = $avneshs + $avnutrs + $arashs + $amontajs + $monitor + $vint + $areg;

if ($akol == 0) {  
echo "Укажите необходмое колличество видеокамер.<BR><BR>";

} else {
echo ("<h1>Аналоговые видеокамеры</h1>\n");      
echo ("Уличная видеокамера Hikvision  DS-2CE15A2P-IR - $avnesh шт. - $avneshcena тг. - $avneshs тг.<BR>\n");
echo ("Внутренняя видеокамера Hikvision  DS-2CE55A2P-IRP - $avnutr шт. - $avnutrcena тг. - $avnutrs тг.<BR>\n");
echo ("Видеорегистратор $aregname - $areg<BR>\n");
echo ("жесткий диск Toshiba 500 гб - 1 - $vint тг.<BR>\n");
echo ("расходные материалы кабель, блоки питания за 1 ед. - $akol - $arash тг. - $arashs тг.<BR>\n");
echo ("Монтаж камеры 1 шт. - $akol - $amontaj тг. - $amontajs тг.<BR>\n");
echo ("Монитор Aser 18.5' - 1 - $monitor тг.<BR><BR>\n");
echo ("<b>Итого</b> - $aitogo тг.<BR><BR>\n");
}
    
}
else
{
    echo "";
}    
/* конец расчет аналоговых */    





/* расчет IP */

if(isset($_POST['ip']) &&
   $_POST['ip'] == 'Yes')
{

$ipvnesh = $vnesh;
$ipvnutr = $vnutr;

$ipkol = $ipvnesh    + $ipvnutr;
$ipvneshcena = 24500;
$ipvnutrcena = 24000;
$vint = 12200;
$monitor = 18300;
$iprash = 9000;
$ipmontaj = 3000;

$ipvneshs = $ipvnesh * $ipvneshcena;
$ipvnutrs = $ipvnutr * $ipvnutrcena;
$iprashs = $ipkol * $iprash;
$ipmontajs = $ipkol * $ipmontaj;

if ($ipkol < 4) {$ipreg = 31000;}
elseif ($ipkol < 8) {$ipreg = 41000;}
elseif ($ipkol < 16) {$ipreg = 51000;}
elseif ($ipkol < 20) {$ipreg = 82000;}
elseif ($ipkol < 24) {$ipreg = 92000;}
elseif ($ipkol < 32) {$ipreg = 102000;}
elseif ($ipkol < 100000) {$ipreg = "Индивидуальный расчет";}
else {$ipregname = 0;}

if ($ipkol < 4) {$ipregname = "Hikvision DS-7104NI-SN 4-х канальный";}
elseif ($ipkol < 8) {$ipregname = "Hikvision DS-7108NI-SN 8-ми канальный";}
elseif ($ipkol < 16) {$ipregname = "Hikvision DS-7116NI-SN 16-ти канальный";}
elseif ($ipkol < 20) {$ipregname = "Hikvision DS-7116NI-SN 16-ти канальный и Hikvision DS-7104NI-SN 4-х канальный";}
elseif ($ipkol < 24) {$ipregname = "Hikvision DS-7116NI-SN 16-ти канальный и Hikvision DS-7108NI-SN 8-ми канальный";}
elseif ($ipkol < 32) {$ipregname = "Hikvision DS-7116NI-SN 16-ти канальный (2 шт.)";}
elseif ($ipkol < 100000) {$ipregname = "Hikvision";}
else {$ipreg = 0;}

$ipitogo = $ipvneshs + $ipvnutrs + $iprashs + $ipmontajs + $monitor + $vint + $ipreg;

if ($ipkol == 0) {  
echo "Укажите необходмое колличество видеокамер.<BR><BR>";

} else {
echo ("<h1>IP видеокамеры</h1>\n");      
echo ("Уличная видеокамера Hikvision DS-2CD2012-I - $ipvnesh шт. - $ipvneshcena тг. - $ipvneshs тг.<BR>\n");
echo ("Внутренняя видеокамера Hikvision DS-2CD2412F-I - $ipvnutr шт. - $ipvnutrcena тг. - $ipvnutrs тг.<BR>\n");
echo ("Видеорегистратор $ipregname - $ipreg<BR>\n");
echo ("жесткий диск Toshiba 500 гб - 1 - $vint тг.<BR>\n");
echo ("расходные материалы кабель, блоки питания за 1 ед. - $ipkol - $iprash тг. - $iprashs тг.<BR>\n");
echo ("Монтаж камеры 1 шт. - $ipkol - $ipmontaj тг. - $ipmontajs тг.<BR>\n");
echo ("Монитор Aser 18.5' - 1 - $monitor тг.<BR><BR>\n");
echo ("<b>Итого</b> - $ipitogo тг.<BR><BR>\n");
}
    
}
else
{
    echo "";
}    
/* конец расчет IP */


/* расчет HD */

if(isset($_POST['hd']) &&
   $_POST['hd'] == 'Yes')
{

$hdvnesh = $vnesh;
$hdvnutr = $vnutr;

$hdkol = $hdvnesh    + $hdvnutr;
$hdvneshcena = 12660;
$hdvnutrcena = 11200;
$vint = 12200;
$monitor = 18300;
$hdrash = 8000;
$hdmontaj = 3000;

$hdvneshs = $hdvnesh * $hdvneshcena;
$hdvnutrs = $hdvnutr * $hdvnutrcena;
$hdrashs = $hdkol * $hdrash;
$hdmontajs = $hdkol * $hdmontaj;

if ($hdkol < 4) {$hdreg = 24720;}
elseif ($hdkol < 8) {$hdreg = 31840;}
elseif ($hdkol < 16) {$hdreg = 64840;}
elseif ($hdkol < 20) {$hdreg = 89560;}
elseif ($hdkol < 24) {$hdreg = 96680;}
elseif ($hdkol < 32) {$hdreg = 129680;}
elseif ($hdkol < 100000) {$hdreg = "Индивидуальный расчет";}
else {$hdregname = 0;}

if ($hdkol < 4) {$hdregname = "Hikvision DS-7204HGHI-SH 4-х канальный";}
elseif ($hdkol < 8) {$hdregname = "Hikvision DS-7208HGHI-SH 8-ми канальный";}
elseif ($hdkol < 16) {$hdregname = "Hikvision DS-7216HGHI-SH 16-ти канальный";}
elseif ($hdkol < 20) {$hdregname = "Hikvision DS-7216HGHI-SH 16-ти канальный и Hikvision DS-7204HGHI-SH 4-х канальный";}
elseif ($hdkol < 24) {$hdregname = "Hikvision DS-7216HGHI-SH 16-ти канальный и Hikvision DS-7208HGHI-SH 8-ми канальный";}
elseif ($hdkol < 32) {$hdregname = "Hikvision DS-7216HGHI-SH 16-ти канальный (2 шт.)";}
elseif ($hdkol < 100000) {$hdregname = "Hikvision";}
else {$hdreg = 0;}

$hditogo = $hdvneshs + $hdvnutrs + $hdrashs + $hdmontajs + $monitor + $vint + $hdreg;

if ($hdkol == 0) {  
echo "Укажите необходмое колличество видеокамер.<BR><BR>";

} else {
echo ("<h1>HD CCTV видеокамеры</h1>\n");      
echo ("Уличная видеокамера Hikvision DS-2CE16C2T-IR - $hdvnesh шт. - $hdvneshcena тг. - $hdvneshs тг.<BR>\n");
echo ("Внутренняя видеокамера Hikvision DS-2CE56C2T-IRM - $hdvnutr шт. - $hdvnutrcena тг. - $hdvnutrs тг.<BR>\n");
echo ("Видеорегистратор $hdregname - $hdreg<BR>\n");
echo ("жесткий диск Toshiba 500 гб - 1 - $vint тг.<BR>\n");
echo ("расходные материалы кабель, блоки питания за 1 ед. - $hdkol - $hdrash тг. - $hdrashs тг.<BR>\n");
echo ("Монтаж камеры 1 шт. - $hdkol - $hdmontaj тг. - $hdmontajs тг.<BR>\n");
echo ("Монитор Aser 18.5' - 1 - $monitor тг.<BR><BR>\n");
echo ("<b>Итого</b> - $hditogo тг.<BR><BR>\n");
}
    
}
else
{
    echo "";
}    
/* конец расчет HD */


}
else
{
    echo "Выберите один из типов видеокамер<BR><BR>";
}    



}
?>


<?php
    $msg_box = ""; // в этой переменной будем хранить сообщения формы
    
    if($_POST['btn_submit']){
        $errors = array(); // контейнер для ошибок
        // проверяем корректность полей
        if($_POST['user_email'] == "")   $errors[] = "Поле 'Ваш e-mail' не заполнено!";
        
        // если форма без ошибок
        if(empty($errors)){    
            // собираем данные из формы
            $message .= "
<h1>Аналоговые видеокамеры</h1>      
Уличная видеокамера Hikvision  DS-2CE15A2P-IR - $avnesh шт. - $avneshcena тг. - $avneshs тг.<BR>
Внутренняя видеокамера Hikvision  DS-2CE55A2P-IRP - $avnutr шт. - $avnutrcena тг. - $avnutrs тг.<BR>
Видеорегистратор $aregname - $areg<BR>
жесткий диск Toshiba 500 гб - 1 - $vint тг.<BR>
расходные материалы кабель, блоки питания за 1 ед. - $akol - $arash тг. - $arashs тг.<BR>
Монтаж камеры 1 шт. - $akol - $amontaj тг. - $amontajs тг.<BR>
Монитор Aser 18.5' - 1 - $monitor тг.<BR><BR>
<b>Итого</b> - $aitogo тг.<BR><BR>
            ";
            send_mail($message); // отправим письмо
            // выведем сообщение об успехе
            $msg_box = "<span style='color: green;'>Сообщение успешно отправлено!</span>";
        }else{
            // если были ошибки, то выводим их
            $msg_box = "";
            foreach($errors as $one_error){
                $msg_box .= "<span style='color: red;'>$one_error</span><br/>";
            }
        }
    }
    
    // функция отправки письма
    function send_mail($message){
        // почта, на которую придет письмо
        $mail_to = $_POST['user_email'];
        // тема письма
        $subject = "Письмо с обратной связи";
        
        // заголовок письма
        $headers= "MIME-Version: 1.0\r\n";
        $headers .= "Content-type: text/html; charset=utf-8\r\n"; // кодировка письма
        $headers .= "From: info@aqt.kz\r\n"; // от кого письмо
        
        // отправляем письмо
        mail($mail_to, $subject, $message, $headers);
    }
?>

<?= $msg_box; // вывод сообщений ?>
<br/>
<form action="<?=$_SERVER['PHP_SELF'];?>" method="post" name="frm_feedback">
Отправить расчет на почту - <input type="text" name="user_email" value="<?=($_POST['user_email']) ? $_POST['user_email'] : ""; // сохраняем то, что вводили?>" />
<input type="submit" value="Отправить" name="btn_submit" />
</form>


Думаю это все из за того что когда нажимаю кнопку отправить, страница перезагружается и переменные становятся пустыми. Прошу помощи, подскажите как исправить. или хотябы просто скажите как вообще такое должно работать.

Сообщение отредактировал x64 - 28.2.2015, 11:11
Причина редактирования: add spoiler


--------------------
Продвижение сайтов в Казахстане - trizmer.com
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
x64
x64
сообщение 28.2.2015, 11:17; Ответить: x64
Сообщение #2


Цитата
if($_POST['submit']) {
# код для первой кнопки
}

if($_POST['btn_submit']){
# код для второй кнопки
}

Данные считаются только по первой кнопке. При нажатии на вторую первая ветка просто пропускается.

ЗЫ: вообще, разрабатывать надо в режиме включённых ошибок.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Trizmer
Trizmer
Topic Starter сообщение 28.2.2015, 11:24; Ответить: Trizmer
Сообщение #3


x64, Спасибо за ответ. если не сложно могли бы показать примитивный пример того как должно работать?

К примеру просто вводим поле, нажимаем кнопку это поле высвечивается на экране. ниже вводим меил нажимаем отправить и то что отображается на экране уходит на почту.

Сообщение отредактировал Trizmer - 28.2.2015, 11:25


--------------------
Продвижение сайтов в Казахстане - trizmer.com
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
x64
x64
сообщение 28.2.2015, 11:29; Ответить: x64
Сообщение #4


Сделать единый контейнер формы (сейчас их два), и первый if () заменить на:
Цитата
if($_POST['submit'] || $_POST['btn_submit']) {
}
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
andreykashops
andreykashops
сообщение 28.2.2015, 12:00; Ответить: andreykashops
Сообщение #5


ТС, у вас же не сохраняются введенные юзером данные, после расчет стоимости там нечему отправляться на почту...


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Trizmer
Trizmer
Topic Starter сообщение 28.2.2015, 12:28; Ответить: Trizmer
Сообщение #6


x64, пробую по разному, не получается у меня. сделал простой пример http://aqt.kz/test.php

Код
<form  method="post" name="form" action="">
текст - <INPUT TYPE=TEXT NAME="text" SIZE=20   onkeypress="return OnlyNum(event)" maxlength="3">
<input type="submit" value="Вывести текст" style="width: 155px;" id="btkalk" name="submit"></form>

<?php

if($_POST['submit']) {
       $text = $_POST['text'];
echo ("Текст - $text");    
}          
else
{
    echo "";
}
?>

<?php
    $msg_box = ""; // в этой переменной будем хранить сообщения формы
    
    if($_POST['btn_submit']){
        $errors = array(); // контейнер для ошибок
        // проверяем корректность полей
        if($_POST['user_email'] == "")   $errors[] = "Поле 'Ваш e-mail' не заполнено!";
        
        // если форма без ошибок
        if(empty($errors)){    
            // собираем данные из формы
            $message .= "Текст - $text";
            send_mail($message); // отправим письмо
            // выведем сообщение об успехе
            $msg_box = "<span style='color: green;'>Сообщение успешно отправлено!</span>";
        }else{
            // если были ошибки, то выводим их
            $msg_box = "";
            foreach($errors as $one_error){
                $msg_box .= "<span style='color: red;'>$one_error</span><br/>";
            }
        }
    }
    
    // функция отправки письма
    function send_mail($message){
        // почта, на которую придет письмо
        $mail_to = $_POST['user_email'];
        // тема письма
        $subject = "Письмо с обратной связи";
        
        // заголовок письма
        $headers= "MIME-Version: 1.0\r\n";
        $headers .= "Content-type: text/html; charset=utf-8\r\n"; // кодировка письма
        $headers .= "From: info@aqt.kz\r\n"; // от кого письмо
        
        // отправляем письмо
        mail($mail_to, $subject, $message, $headers);
    }
?>

<?= $msg_box; // вывод сообщений ?>
<br/>
<form action="<?=$_SERVER['PHP_SELF'];?>" method="post" name="frm_feedback">
Отправить текст на почту - <input type="text" name="user_email" value="<?=($_POST['user_email']) ? $_POST['user_email'] : ""; // сохраняем то, что вводили?>" />
<input type="submit" value="Отправить" name="btn_submit" />
</form>


Исправте в этом примере как вы говорите чтобы я понял. Надо чтобы человек сначала ввел текст и вывел его на экран и только почле этого ввел свой меил и отправил на почту. Спасибо.


--------------------
Продвижение сайтов в Казахстане - trizmer.com
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
x64
x64
сообщение 28.2.2015, 12:33; Ответить: x64
Сообщение #7


Цитата(Trizmer @ 28.2.2015, 11:28) *
Надо чтобы человек сначала ввел текст и вывел его на экран и только почле этого ввел свой меил и отправил на почту

Значит, данные сначала надо сохранить, после чего вывести вторую форму с кнопкой, при нажатии на которую их восстановить и отослать. Сессии в помощь.
При штатном режиме работы, отослали форму один раз, сервер вернул ответ и забыл про него. При втором запросе происходит то же самое. И при третьем.


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Trizmer
Trizmer
Topic Starter сообщение 28.2.2015, 13:54; Ответить: Trizmer
Сообщение #8


x64, ооо чего я и боялся, я совсем далек. знаний моих хватило на гульку и еще чуть чуть. Подскажите пожалуйста какой раздел php почитать чтобы я это смог осуществить. Спасибо.

x64, я почитал про сессии, и поставил в первой части скрипта

session_start();
$_SESSION['text'] = $text;

Как я понимаю это дожно сохранить значение переменно $text

и во второй части скрипта я пытаюсь эту переменную восстановить

session_start();
$textmail = $_SESSION['text'];

Но ничего не выходит, когда нажимаю отправку $_SESSION['text'] оказывается пустым. Но если в сессию в верхней части записать не переменную $text а просто текст тогда он передается на почту.

Получается проблема в том что когда я нажимаю отправить письмо $_SESSION['text'] перезаписывается и становится пустым.

Подскажите пожалуйста как решить эту проблему.


--------------------
Продвижение сайтов в Казахстане - trizmer.com
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
x64
x64
сообщение 28.2.2015, 14:11; Ответить: x64
Сообщение #9


session_start() срабатывает, только если она идёт до любого вывода данных (если файл сохранён в UTF-8 с BOM, не сработает, т. к. перед <? будут добавлено 3 байта сигнатуры).

Простой пример во вложении. Если сразу нажать на вторую кнопку, значение переменной в сессии будет не определено. Если ввести значение в поле и нажать первую кнопку, оно запишется в сессию, после чего нажатие второй кнопки выводит это значение. Если заполнить поле чем-то другим, переменная в сессии будет изменена на новое значение.
Прикрепленные файлы
Прикрепленный файл  session_example.zip ( 643 байт ) Кол-во скачиваний: 20
 
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Trizmer
Trizmer
Topic Starter сообщение 28.2.2015, 14:23; Ответить: Trizmer
Сообщение #10


Решил проблему разделением скрипта на два файла - ввод данных, расчет, форма отправки на меил и второй файл обработчик формы отправки на меил, иначе сессия перезаписывалась.

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.


--------------------
Продвижение сайтов в Казахстане - trizmer.com
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0


Свернуть

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

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Отправка смс на телефоне через web-сайт
0 Sepembra 956 21.8.2018, 16:13
автор: Sepembra
Открытая тема (нет новых ответов) Ищу знатока MODX и контактных форм (отправка сообщений с сайта)
0 by_roXe 1844 31.5.2017, 14:35
автор: by_roXe
Открытая тема (нет новых ответов) VkNotify - отправка уведомлений ВКонтакте
9 lordonx3 12466 4.5.2015, 14:17
автор: lordonx3
Открытая тема (нет новых ответов) Требуется Отправка ссылок в индекс
2 sergeyasaylak 5209 5.2.2015, 22:34
автор: mixalius
Открытая тема (нет новых ответов) Отправка данных с формы в php и на почту
1 Beactive 3342 24.4.2014, 21:56
автор: -Beactive-


 



RSS Текстовая версия Сейчас: 16.4.2024, 14:30
Дизайн