Всем доброго времени суток. Скажу сразу, что в данном вопросе я новичок и много еще не знаю, поэтому прошу помощи или совета. Ситуация следующая: есть форма с полями для заполнения, на форме есть кнопка по нажатию на которую вся информация из этих полей отправляется на почту и сохраняется в БД. Нажимаем на кнопку, срабатывает onclick="sendData();" и далее: Код (PHP): function saveData(){ var httpParams = "time=" + $("#time").val() + "&phone=" + $("#phone").val() + "&content=" + $("#content").val() + "&status=" + $("#status :selected").val() + "&name=" + $("#name").val() + "&contact_phone=" + $("#contact_phone").val() + "&operator=" + $("#operator").val() + "&transfer=" + $("#transfer :selected").val() + "&source=" + $("#source").val(); $.ajax({url: "./ajax/update.php",data: httpParams,type :"post",success: function(){$("#result").html("данные успешно внесены").fadeOut(3000);},error: function(){$("#result").html("ошибка").fadeOut(3000);}}); $("#save").hide(); return false; } function sendData(){ var httpParams2 ="time=" + $("#time").val() + "&phone=" + $("#phone").val() + "&content=" + $("#content").val() + "&status=" + $("#status :selected").val() + "&name=" + $("#name").val() + "&contact_phone=" + $("#contact_phone").val() + "&operator=" + $("#operator").val() + "&transfer=" + $("#transfer :selected").val() + "&source=" + $("#source").val(); $.ajax({url: "./ajax/send.php",data: httpParams2,type :"post",success: function(){$("#result").html("данные успешно отправлены").fadeOut(3000).show();},error: function(){$("#result").html("ошибка").fadeOut(3000).show();}}); saveData(); return false; } Отправка на почту: Код (PHP): <?php //error_reporting(0); define ("ADMIN_INCLUDES", "../admin/includes/"); require_once ADMIN_INCLUDES."config.php"; require_once ADMIN_INCLUDES."mysql_connect.php"; require_once ADMIN_INCLUDES."functions_common.php"; require_once ADMIN_INCLUDES."functions.php"; require_once ADMIN_INCLUDES."data/data-name.php"; define("TABLE_BASE",TABLE_PREFIX."base_name"); $sql = "SELECT max(id) FROM ".TABLE_BASE; $sql = iconv("utf-8","windows-1251",$sql); $result = @mysql_query($sql,$connection) or die(MYSQL_ERR.mysql_errno()." : ".mysql_error()); list ($_POST['id']) = mysql_fetch_row($result); $from='po4ta@gmail.com'; $title="Обращение №".$_POST['id']; $title = iconv("windows-1251","utf-8",$title); $q = iconv("windows-1251","utf-8","Телефон: "); $w = iconv("windows-1251","utf-8","Оператор: "); $e = iconv("windows-1251","utf-8","Статус: "); $f = iconv("windows-1251","utf-8","Статус перевода: "); $d = iconv("windows-1251","utf-8","ФИО/Компания: "); $s = iconv("windows-1251","utf-8","Откуда узнали о нас: "); $g = iconv("windows-1251","utf-8","Контактный телефон: "); $t = iconv("windows-1251","utf-8","Комментарий: "); $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"]; $to = 'pochta@gmail.com'; mail($to, $title, $mess, "Content-type:text/plain; charset = utf-8\r\nFrom:$from"); ?> Сохранение в БД: Код (PHP): <?php error_reporting(0); define ("ADMIN_INCLUDES", "../admin/includes/"); require_once ADMIN_INCLUDES."config.php"; require_once ADMIN_INCLUDES."mysql_connect.php"; require_once ADMIN_INCLUDES."functions_common.php"; require_once ADMIN_INCLUDES."functions.php"; define("TABLE_BASE",TABLE_PREFIX."base_name"); header('Content-Type: text/html; charset=utf-8'); $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"); $dt = explode(" ",$_POST['time']); $_POST['time'] = $dt[6]."-".$moonths[$dt[1]]."-".$dt[2]." ".$dt[3]; if (strlen($_POST["phone"])==12): $_POST["phone"]=substr($_POST["phone"],2,11); elseif (strlen($_POST["phone"])==13): $_POST["phone"]=substr($_POST["phone"],3,12); endif; $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']."')"; $sql = iconv("utf-8","windows-1251",$sql); mysql_query($sql,$connection) or die(MYSQL_ERR.mysql_errno()." : ".mysql_error()); ?> И собственно сама проблема: с сохранением в БД - проблем никаких, все прекрасно, а вот с отправкой есть проблемка - в заголовке письма "Обращение №" подставляется id последней записи в БД, но почему то отрабатывает не всегда правильно, может присвоить двум разным обращениям один и тот же номер. Так же номер обращения в заголовке письма должен быть на 1 меньше его реального номера в БД, но иногда получается так что присваивает им их реальные номера из БД. (т.к. сначала обращение отправляется а потом вносится в бд, то запрощенный max(id) у БД, возвращает по факту номер предыдущей записи). Народ подскажите, что где не так? или так? и прошу сильно ногами не пинать, т.к. действительно плохо еще во всем этом разбираюсь. Заранее спасибо за помощь. PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
потому что вместо выбора максимального идентификатора записи нужно использовать значение идентификатора, вставленного предыдущим запросом - mysql_insert_id.
Как сказал интернет: Как я уже писал, сначала происходит отправка, а потом запись в таблицу БД. Но это не беда, поравил. Сначала запишем, потом отправим. Получилось что-то вроде этого: Код (PHP): <?php error_reporting(0); define ("ADMIN_INCLUDES", "../admin/includes/"); require_once ADMIN_INCLUDES."config.php"; require_once ADMIN_INCLUDES."mysql_connect.php"; require_once ADMIN_INCLUDES."functions_common.php"; require_once ADMIN_INCLUDES."functions.php"; define("TABLE_BASE",TABLE_PREFIX."base_name"); header('Content-Type: text/html; charset=utf-8'); $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"); $dt = explode(" ",$_POST['time']); $_POST['time'] = $dt[6]."-".$moonths[$dt[1]]."-".$dt[2]." ".$dt[3]; if (strlen($_POST["phone"])==12): $_POST["phone"]=substr($_POST["phone"],2,11); elseif (strlen($_POST["phone"])==13): $_POST["phone"]=substr($_POST["phone"],3,12); endif; $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']."')"; $sql = iconv("utf-8","windows-1251",$sql); mysql_query($sql,$connection) or die(MYSQL_ERR.mysql_errno()." : ".mysql_error()); $_POST["id"] = mysql_insert_id(); ?> и Код (PHP): <?php //error_reporting(0); define ("ADMIN_INCLUDES", "../admin/includes/"); require_once ADMIN_INCLUDES."config.php"; require_once ADMIN_INCLUDES."mysql_connect.php"; require_once ADMIN_INCLUDES."functions_common.php"; require_once ADMIN_INCLUDES."functions.php"; require_once ADMIN_INCLUDES."data/data-name.php"; define("TABLE_BASE",TABLE_PREFIX."base_name"); $from='po4ta@gmail.com'; $title="Обращение №".$_POST['id']; $title = iconv("windows-1251","utf-8",$title); $q = iconv("windows-1251","utf-8","Телефон: "); $w = iconv("windows-1251","utf-8","Оператор: "); $e = iconv("windows-1251","utf-8","Статус: "); $f = iconv("windows-1251","utf-8","Статус перевода: "); $d = iconv("windows-1251","utf-8","ФИО/Компания: "); $s = iconv("windows-1251","utf-8","Откуда узнали о нас: "); $g = iconv("windows-1251","utf-8","Контактный телефон: "); $t = iconv("windows-1251","utf-8","Комментарий: "); $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"]; $to = 'pochta@gmail.com'; mail($to, $title, $mess, "Content-type:text/plain; charset = utf-8\r\nFrom:$from"); ?> но оно у меня не заработало, и теперь в заголовке письма приходит просто "Обращение №" без номера вообще. Если кому не трудно, распишите пожалуйста чуть поподробнее, как уже говорилось в этом деле я чайник.
Re: php + БД + автоматисечкая рассылка Эти два куска кода выполняются последовательно без перезагрузки страницы? Передай результат mysql_insert_id() во второй кусок кода
Посмотри что возвращает mysql_insert_id() и смотри в документацию phpfaq.ru/debug ты не указал для mysql_insert_id какое соединение использовать
Забыл отписаться сразу. Но в общем я видимо пошел по пути наименьшего сопротивления и в итоге сделал сначала запись в бд а потом отправку информации на почту в одном файле, получилось так: Код (PHP): <?php //error_reporting(0); define ("ADMIN_INCLUDES", "../admin/includes/"); require_once ADMIN_INCLUDES."config.php"; require_once ADMIN_INCLUDES."mysql_connect.php"; require_once ADMIN_INCLUDES."functions_common.php"; require_once ADMIN_INCLUDES."functions.php"; require_once ADMIN_INCLUDES."data/data-name.php"; define("TABLE_BASE",TABLE_PREFIX."base_name"); header('Content-Type: text/html; charset=utf-8'); $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"); $dt = explode(" ",$_POST['time']); $_POST['time'] = $dt[6]."-".$moonths[$dt[1]]."-".$dt[2]." ".$dt[3]; if (strlen($_POST["phone"])==12): $_POST["phone"]=substr($_POST["phone"],2,11); elseif (strlen($_POST["phone"])==13): $_POST["phone"]=substr($_POST["phone"],3,12); endif; $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']."')"; $sql = iconv("utf-8","windows-1251",$sql); mysql_query($sql,$connection) or die(MYSQL_ERR.mysql_errno()." : ".mysql_error()); $latest_id = mysql_insert_id(); $from='po4ta@gmail.com'; $title="Обращение №".$latest_id; $title = iconv("windows-1251","utf-8",$title); $q = iconv("windows-1251","utf-8","Телефон: "); $w = iconv("windows-1251","utf-8","Оператор: "); $e = iconv("windows-1251","utf-8","Статус: "); $f = iconv("windows-1251","utf-8","Статус перевода: "); $d = iconv("windows-1251","utf-8","ФИО/Компания: "); $s = iconv("windows-1251","utf-8","Откуда узнали о нас: "); $g = iconv("windows-1251","utf-8","Контактный телефон: "); $t = iconv("windows-1251","utf-8","Комментарий: "); $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"]; $to = 'pochta@gmail.com'; mail($to, $title, $mess, "Content-type:text/plain; charset = utf-8\r\nFrom:$from"); ?> и да спасибо сделал именно так и все стало работать как и задумано.