Автор Тема: Оформляются заказы с номером 0  (Прочитано 5230 раз)

zlat_anton

  • Гость
Оформляются заказы с номером 0
« : Мая 14, 2012, 06:38:57 am »
Установлен Lego 5.0.2
Периодически (но не всегда) оформляются заказы с номером "0", при этом в админке они не показываются, но приходят на почту как уведомления.
Вот скрин письма


Попробовал оформить заказ сам, вот что получилось: при заказе одного товара выскакивает окно с присвоением номера заказа (в нашем случае опять 0), все контактные данные не отображаются (в уведомительном письме они будут), а самое непонятное - откуда взялось столько товаров? Хотя, опят так же, в письме приходит только те товары, которые действительно были заказаны.



Каковы возможные причины? Выручайте господа!
« Последнее редактирование: Мая 14, 2012, 07:32:47 am от zlat_anton »

zlat_anton

  • Гость
Re: Оформляются заказы с номером 0
« Ответ #1 : Мая 14, 2012, 05:50:31 pm »
Кустарным методом решил проблему. Выкладываю решение для тех, кого тоже заденет данный вопрос.

Дело в том, что оригинальный код не всегда срабатывает и не заносит нового клиента в базу данных, отправляя при этом письмо и клиенту и администратору о поступившем заказе с номером "0".

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

Собственно в файле order_place.php ниже кода обработки id заказа


           db_query("INSERT INTO ".ORDERS_TABLE." (order_time, cust_firstname, cust_lastname, cust_email, cust_country, cust_zip, cust_state, cust_city, cust_address, cust_phone, comment, manager) values ('".get_current_time()."','".mysql_real_escape_string($_POST["first_name"])."','".mysql_real_escape_string($_POST["last_name"])."','".$post_email."','".mysql_real_escape_string($_POST["country"])."','".mysql_real_escape_string($_POST["zip"])."','".mysql_real_escape_string($_POST["state"])."','".mysql_real_escape_string($_POST["city"])."','".mysql_real_escape_string($_POST["address"])."','".$post_phone."','".$_POST["comment"]."', '".$man_arr[0]."');") or die (db_error());
             $oid = db_insert_id(); //order ID

ставим следующий код (проще говоря, выполняем эту же команду, но по-другому):
   if (empty($oid) || $oid == '0') {
   # Здесь мы будем повторять запись если ничего не получится
   function SqlSelect ($rows='*', $table, $where="", $order='', $limit='') {
if (!empty ($where)) { $where = "WHERE $where"; }
if (!empty ($order)) { $order = "ORDER BY $order"; }
if (!empty ($limit)) { $limit = "LIMIT $limit"; }
if (!empty ($rows) && $rows != '*') { $rows = str_replace(',', '`,`', "`".$rows."`"); }
$sql = "SELECT $rows FROM `$table` $where $order $limit";
$res = mysql_query($sql) or die(SqlError(mysql_error(), $sql));
$temp = array();
while ($row=mysql_fetch_array($res)) { array_push($temp, $row); }
return $temp;
}

   $newid = SqlSelect ('orderID', 'SS_orders', "", '`orderID` DESC', '0,1');
   $oid = $newid[0]['orderID']+1;
   db_query("INSERT INTO ".ORDERS_TABLE." (orderID, order_time, cust_firstname, cust_lastname, cust_email, cust_country, cust_zip, cust_state, cust_city, cust_address, cust_phone, comment, manager) values ('{$oid}', '".get_current_time()."','".mysql_real_escape_string($_POST["first_name"])."','".mysql_real_escape_string($_POST["last_name"])."','".$post_email."','".mysql_real_escape_string($_POST["country"])."','".mysql_real_escape_string($_POST["zip"])."','".mysql_real_escape_string($_POST["state"])."','".mysql_real_escape_string($_POST["city"])."','".mysql_real_escape_string($_POST["address"])."','".$post_phone."','".$_POST["comment"]."', '".$man_arr[0]."');") or die (db_error());
   }


И все работает! Ура!