За последние 24 часа нас посетили 15826 программистов и 1547 роботов. Сейчас ищут 858 программистов ...

php + БД + автоматическая рассылка

Тема в разделе "PHP и базы данных", создана пользователем PrtScreen, 25 ноя 2015.

  1. PrtScreen

    PrtScreen Новичок

    С нами с:
    25 ноя 2015
    Сообщения:
    4
    Симпатии:
    0
    Всем доброго времени суток.
    Скажу сразу, что в данном вопросе я новичок и много еще не знаю, поэтому прошу помощи или совета.
    Ситуация следующая: есть форма с полями для заполнения, на форме есть кнопка по нажатию на которую вся информация из этих полей отправляется на почту и сохраняется в БД.
    Нажимаем на кнопку, срабатывает onclick="sendData();" и далее:

    Код (PHP):
    1.    function saveData(){
    2.         var httpParams = "time=" + $("#time").val() + 
    3.                         "&phone=" + $("#phone").val() + 
    4.                         "&content=" + $("#content").val() +
    5.                         "&status=" + $("#status :selected").val() +
    6.                         "&name=" + $("#name").val() +
    7.                         "&contact_phone=" + $("#contact_phone").val() +
    8.                         "&operator=" +  $("#operator").val() +
    9.                         "&transfer=" + $("#transfer :selected").val() +
    10.                         "&source=" + $("#source").val();
    11.         $.ajax({url: "./ajax/update.php",data: httpParams,type :"post",success: function(){$("#result").html("данные успешно внесены").fadeOut(3000);},error: function(){$("#result").html("ошибка").fadeOut(3000);}});
    12.         $("#save").hide();
    13.         return false;
    14.     }
    15.         function sendData(){
    16.         var httpParams2 ="time=" + $("#time").val() + 
    17.                         "&phone=" + $("#phone").val() + 
    18.                         "&content=" + $("#content").val() +
    19.                         "&status=" + $("#status :selected").val() +
    20.                         "&name=" + $("#name").val() +
    21.                         "&contact_phone=" + $("#contact_phone").val() +
    22.                         "&operator=" +  $("#operator").val() +
    23.                         "&transfer=" + $("#transfer :selected").val() +
    24.                         "&source=" + $("#source").val();
    25.         $.ajax({url: "./ajax/send.php",data: httpParams2,type :"post",success: function(){$("#result").html("данные успешно отправлены").fadeOut(3000).show();},error: function(){$("#result").html("ошибка").fadeOut(3000).show();}});
    26.         saveData();
    27.         return false;
    28.     }
    Отправка на почту:
    Код (PHP):
    1. <?php
    2.   //error_reporting(0);
    3.   define ("ADMIN_INCLUDES", "../admin/includes/");
    4.   require_once ADMIN_INCLUDES."config.php";
    5.   require_once ADMIN_INCLUDES."mysql_connect.php";
    6.   require_once ADMIN_INCLUDES."functions_common.php";
    7.   require_once ADMIN_INCLUDES."functions.php";
    8.   require_once ADMIN_INCLUDES."data/data-name.php";
    9.   define("TABLE_BASE",TABLE_PREFIX."base_name");
    10.     $sql = "SELECT max(id) FROM ".TABLE_BASE;
    11.     $sql = iconv("utf-8","windows-1251",$sql);
    12.     $result = @mysql_query($sql,$connection) or die(MYSQL_ERR.mysql_errno()." : ".mysql_error()); 
    13.     list ($_POST['id']) = mysql_fetch_row($result);
    14.   $from='po4ta@gmail.com';
    15.   $title="Обращение №".$_POST['id'];
    16.   $title = iconv("windows-1251","utf-8",$title);
    17.   $q = iconv("windows-1251","utf-8","Телефон: ");
    18.   $w = iconv("windows-1251","utf-8","Оператор: ");
    19.   $e = iconv("windows-1251","utf-8","Статус: ");
    20.   $f = iconv("windows-1251","utf-8","Статус перевода: ");
    21.   $d = iconv("windows-1251","utf-8","ФИО/Компания: ");
    22.   $s = iconv("windows-1251","utf-8","Откуда узнали о нас: ");
    23.   $g = iconv("windows-1251","utf-8","Контактный телефон: ");
    24.   $t = iconv("windows-1251","utf-8","Комментарий: ");
    25.   $mess =$q.$_POST["phone"]."\r\n".$d.$_POST["name"]."\r\n".$g.$_POST["contact_phone"]."\r\n".$s.$_POST["source"]."\r\n".$e.iconv("Windows-1251","utf-8",inSet($arr_status,$_POST["status"]))."\r\n".$f.iconv("Windows-1251","utf-8",inSet($arr_transfer,$_POST["transfer"]))."\r\n".$t."\r\n"."\r\n".$_POST["content"];
    26.   
    27.         $to = 'pochta@gmail.com';
    28.         mail($to, $title, $mess, "Content-type:text/plain; charset = utf-8\r\nFrom:$from");
    29.   
    30.  ?>
    Сохранение в БД:
    Код (PHP):
    1. <?php
    2.   define ("ADMIN_INCLUDES", "../admin/includes/");
    3.   require_once ADMIN_INCLUDES."config.php";
    4.   require_once ADMIN_INCLUDES."mysql_connect.php";
    5.   require_once ADMIN_INCLUDES."functions_common.php";
    6.   require_once ADMIN_INCLUDES."functions.php";
    7.   
    8.   define("TABLE_BASE",TABLE_PREFIX."base_name"); 
    9.   header('Content-Type: text/html; charset=utf-8');
    10.   $moonths = array("Jan"=>"01","Feb"=>"02","Mar"=>"03","Apr"=>"04","May"=>"05","Jun"=>"06","Jul"=>"07","Aug"=>"08","Sep"=>"09","Oct"=>"10","Nov"=>"11","Dec"=>"12");
    11.   $dt = explode(" ",$_POST['time']);
    12.   $_POST['time'] = $dt[6]."-".$moonths[$dt[1]]."-".$dt[2]." ".$dt[3];
    13.   if (strlen($_POST["phone"])==12):
    14.         $_POST["phone"]=substr($_POST["phone"],2,11);
    15.     elseif (strlen($_POST["phone"])==13):
    16.         $_POST["phone"]=substr($_POST["phone"],3,12);
    17.     endif;
    18.       $sql = "INSERT INTO ".TABLE_BASE." (time,phone,content,status,name,contact_phone,operator,transfer,source) VALUES('".$_POST['time']."','".$_POST['phone']."','".$_POST['content']."','".$_POST['status']."','".$_POST['name']."','".$_POST['contact_phone']."','".$_POST['operator']."','".$_POST['transfer']."','".$_POST['source']."')";
    19.  $sql = iconv("utf-8","windows-1251",$sql);
    20.   mysql_query($sql,$connection) or die(MYSQL_ERR.mysql_errno()." : ".mysql_error());  
    21.  ?>
    И собственно сама проблема: с сохранением в БД - проблем никаких, все прекрасно, а вот с отправкой есть проблемка - в заголовке письма "Обращение №" подставляется id последней записи в БД, но почему то отрабатывает не всегда правильно, может присвоить двум разным обращениям один и тот же номер. Так же номер обращения в заголовке письма должен быть на 1 меньше его реального номера в БД, но иногда получается так что присваивает им их реальные номера из БД. (т.к. сначала обращение отправляется а потом вносится в бд, то запрощенный max(id) у БД, возвращает по факту номер предыдущей записи). Народ подскажите, что где не так? или так? и прошу сильно ногами не пинать, т.к. действительно плохо еще во всем этом разбираюсь.

    Заранее спасибо за помощь.

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    потому что вместо выбора максимального идентификатора записи нужно использовать значение идентификатора, вставленного предыдущим запросом - mysql_insert_id.
     
  3. PrtScreen

    PrtScreen Новичок

    С нами с:
    25 ноя 2015
    Сообщения:
    4
    Симпатии:
    0
    Как сказал интернет:
    Как я уже писал, сначала происходит отправка, а потом запись в таблицу БД. Но это не беда, поравил. Сначала запишем, потом отправим.
    Получилось что-то вроде этого:
    Код (PHP):
    1.     <?php
    2.       error_reporting(0);
    3.       define ("ADMIN_INCLUDES", "../admin/includes/");
    4.       require_once ADMIN_INCLUDES."config.php";
    5.       require_once ADMIN_INCLUDES."mysql_connect.php";
    6.       require_once ADMIN_INCLUDES."functions_common.php";
    7.       require_once ADMIN_INCLUDES."functions.php";
    8.       
    9.       define("TABLE_BASE",TABLE_PREFIX."base_name"); 
    10.       header('Content-Type: text/html; charset=utf-8');
    11.       $moonths = array("Jan"=>"01","Feb"=>"02","Mar"=>"03","Apr"=>"04","May"=>"05","Jun"=>"06","Jul"=>"07","Aug"=>"08","Sep"=>"09","Oct"=>"10","Nov"=>"11","Dec"=>"12");
    12.       $dt = explode(" ",$_POST['time']);
    13.       $_POST['time'] = $dt[6]."-".$moonths[$dt[1]]."-".$dt[2]." ".$dt[3];
    14.       if (strlen($_POST["phone"])==12):
    15.             $_POST["phone"]=substr($_POST["phone"],2,11);
    16.         elseif (strlen($_POST["phone"])==13):
    17.             $_POST["phone"]=substr($_POST["phone"],3,12);
    18.         endif;
    19.           $sql = "INSERT INTO ".TABLE_BASE." (time,phone,content,status,name,contact_phone,operator,transfer,source) VALUES('".$_POST['time']."','".$_POST['phone']."','".$_POST['content']."','".$_POST['status']."','".$_POST['name']."','".$_POST['contact_phone']."','".$_POST['operator']."','".$_POST['transfer']."','".$_POST['source']."')";
    20.      $sql = iconv("utf-8","windows-1251",$sql);
    21.       mysql_query($sql,$connection) or die(MYSQL_ERR.mysql_errno()." : ".mysql_error());
    22.      $_POST["id"] = mysql_insert_id();  
    23.      ?>
    и

    Код (PHP):
    1.     <?php
    2.       //error_reporting(0);
    3.       define ("ADMIN_INCLUDES", "../admin/includes/");
    4.       require_once ADMIN_INCLUDES."config.php";
    5.       require_once ADMIN_INCLUDES."mysql_connect.php";
    6.       require_once ADMIN_INCLUDES."functions_common.php";
    7.       require_once ADMIN_INCLUDES."functions.php";
    8.       require_once ADMIN_INCLUDES."data/data-name.php";
    9.       define("TABLE_BASE",TABLE_PREFIX."base_name");
    10.  
    11.       $from='po4ta@gmail.com';
    12.       $title="Обращение №".$_POST['id'];
    13.       $title = iconv("windows-1251","utf-8",$title);
    14.       $q = iconv("windows-1251","utf-8","Телефон: ");
    15.       $w = iconv("windows-1251","utf-8","Оператор: ");
    16.       $e = iconv("windows-1251","utf-8","Статус: ");
    17.       $f = iconv("windows-1251","utf-8","Статус перевода: ");
    18.       $d = iconv("windows-1251","utf-8","ФИО/Компания: ");
    19.       $s = iconv("windows-1251","utf-8","Откуда узнали о нас: ");
    20.       $g = iconv("windows-1251","utf-8","Контактный телефон: ");
    21.       $t = iconv("windows-1251","utf-8","Комментарий: ");
    22.       $mess =$q.$_POST["phone"]."\r\n".$d.$_POST["name"]."\r\n".$g.$_POST["contact_phone"]."\r\n".$s.$_POST["source"]."\r\n".$e.iconv("Windows-1251","utf-8",inSet($arr_status,$_POST["status"]))."\r\n".$f.iconv("Windows-1251","utf-8",inSet($arr_transfer,$_POST["transfer"]))."\r\n".$t."\r\n"."\r\n".$_POST["content"];
    23.       
    24.             $to = 'pochta@gmail.com';
    25.             mail($to, $title, $mess, "Content-type:text/plain; charset = utf-8\r\nFrom:$from");
    26.       
    27.      ?>
    но оно у меня не заработало, и теперь в заголовке письма приходит просто "Обращение №" без номера вообще. Если кому не трудно, распишите пожалуйста чуть поподробнее, как уже говорилось в этом деле я чайник.
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Re: php + БД + автоматисечкая рассылка

    Эти два куска кода выполняются последовательно без перезагрузки страницы?
    Передай результат mysql_insert_id() во второй кусок кода
     
  5. PrtScreen

    PrtScreen Новичок

    С нами с:
    25 ноя 2015
    Сообщения:
    4
    Симпатии:
    0
    Да, выполняются без перезагрузки страницы.
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Посмотри что возвращает mysql_insert_id() и смотри в документацию
    phpfaq.ru/debug

    ты не указал для mysql_insert_id какое соединение использовать
     
  7. PrtScreen

    PrtScreen Новичок

    С нами с:
    25 ноя 2015
    Сообщения:
    4
    Симпатии:
    0
    Забыл отписаться сразу. Но в общем я видимо пошел по пути наименьшего сопротивления и в итоге сделал сначала запись в бд а потом отправку информации на почту в одном файле, получилось так:

    Код (PHP):
    1. <?php
    2.     //error_reporting(0);
    3.     define ("ADMIN_INCLUDES", "../admin/includes/");
    4.     require_once ADMIN_INCLUDES."config.php";
    5.     require_once ADMIN_INCLUDES."mysql_connect.php";
    6.     require_once ADMIN_INCLUDES."functions_common.php";
    7.     require_once ADMIN_INCLUDES."functions.php";
    8.     require_once ADMIN_INCLUDES."data/data-name.php";
    9.     define("TABLE_BASE",TABLE_PREFIX."base_name");
    10.  
    11.     header('Content-Type: text/html; charset=utf-8');
    12.     $moonths = array("Jan"=>"01","Feb"=>"02","Mar"=>"03","Apr"=>"04","May"=>"05","Jun"=>"06","Jul"=>"07","Aug"=>"08","Sep"=>"09","Oct"=>"10","Nov"=>"11","Dec"=>"12");
    13.     $dt = explode(" ",$_POST['time']);
    14.     $_POST['time'] = $dt[6]."-".$moonths[$dt[1]]."-".$dt[2]." ".$dt[3];
    15.     if (strlen($_POST["phone"])==12):
    16.     $_POST["phone"]=substr($_POST["phone"],2,11);
    17.       elseif (strlen($_POST["phone"])==13):
    18.     $_POST["phone"]=substr($_POST["phone"],3,12);
    19.       endif;
    20.         $sql = "INSERT INTO ".TABLE_BASE." (time,phone,content,status,name,contact_phone,operator,transfer,source) VALUES('".$_POST['time']."','".$_POST['phone']."','".$_POST['content']."','".$_POST['status']."','".$_POST['name']."','".$_POST['contact_phone']."','".$_POST['operator']."','".$_POST['transfer']."','".$_POST['source']."')";
    21.     $sql = iconv("utf-8","windows-1251",$sql);
    22.     mysql_query($sql,$connection) or die(MYSQL_ERR.mysql_errno()." : ".mysql_error()); 
    23.           $latest_id = mysql_insert_id();
    24.           
    25.     $from='po4ta@gmail.com';
    26.     $title="Обращение №".$latest_id;
    27.     $title = iconv("windows-1251","utf-8",$title);
    28.     $q = iconv("windows-1251","utf-8","Телефон: ");
    29.     $w = iconv("windows-1251","utf-8","Оператор: ");
    30.     $e = iconv("windows-1251","utf-8","Статус: ");
    31.     $f = iconv("windows-1251","utf-8","Статус перевода: ");
    32.     $d = iconv("windows-1251","utf-8","ФИО/Компания: ");
    33.     $s = iconv("windows-1251","utf-8","Откуда узнали о нас: ");
    34.     $g = iconv("windows-1251","utf-8","Контактный телефон: ");
    35.     $t = iconv("windows-1251","utf-8","Комментарий: ");
    36.     $mess =$q.$_POST["phone"]."\r\n".$d.$_POST["name"]."\r\n".$g.$_POST["contact_phone"]."\r\n".$s.$_POST["source"]."\r\n".$e.iconv("Windows-1251","utf-8",inSet($arr_status,$_POST["status"]))."\r\n".$f.iconv("Windows-1251","utf-8",inSet($arr_transfer,$_POST["transfer"]))."\r\n".$t."\r\n"."\r\n".$_POST["content"];
    37.  
    38.     $to = 'pochta@gmail.com';
    39.     mail($to, $title, $mess, "Content-type:text/plain; charset = utf-8\r\nFrom:$from");
    40. ?>
    и да спасибо
    сделал именно так и все стало работать как и задумано.