Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Оформление заказа интернет-магазина

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Не проходит заказ у авторизованного посетителя и не добавляются значения в поля MySQL
EVGENphp
Отправлено: 16 Декабря, 2014 - 11:37:51
Post Id


Новичок


Покинул форум
Сообщений всего: 13
Дата рег-ции: Дек. 2014  


Помог: 0 раз(а)




Друзья, приветствую!

Занимаюсь php не так давно, и вот уже 2 дня пытаюсь понять причину ошибки при оформлении заказа.

Суть такая:
В магазине, как и положено, есть форма авторизации и регистрации.

При регистрации пользователь заполняет следующие поля:
<имя>
<фамилия>
<отчество>
<email>
<пароль>
Каждое отдельным инпутом. Все это дело заносится в соответствующую таблицу БД.

Авторизация проходит по 2-м параметрам:
<email> и <пароль>.

Обе процедуры проходят на ура, и с этим проблем нет.


При оформлении заказа посетитель должен заполнить след. поля:
<имя>
<фамилия>
<отчество>
<email>
<телефон>
<индекс>
<город>
<улица, дом>
Все они находятся в одной таблице БД.

Т.е. если у меня пользователь авторизован, то я должен до внести последние 4 поля. Пишу соответствующую функцию:

PHP:
скопировать код в буфер обмена
  1. function add_information(){
  2.             $query = "UPDATE customers SET phone = '$phone', postcode = '$postcode', city = '$city', address = '$address'
  3.                        WHERE customer_id = '$customer_id'";
  4.             $res = mysql_query($query) or die (mysql_error());
  5. }


При отработке на этой функции никаких ошибок не выдает, но и данные не добавляет.

Ошибку выдает при отработке функции оформления заказа:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' NOW(), 2, '5')' at line 2

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


Для тех кто не равнодушен напишу весь код добавления заказа:

PHP:
скопировать код в буфер обмена
  1. function add_order(){
  2.     // получаем данные - общие для для всех пользователей и id авторизованных пользователей
  3.     $dostavka_id = (int)$_POST['dostavka'];
  4.     if(!$dostavka_id) $dostavka_id = 2;
  5.     $phone = clear($_POST['phone']);
  6.     $postcode = clear($_POST['postcode']);
  7.     $city = clear($_POST['city']);
  8.     $address = clear($_POST['address']);
  9.     $note = clear($_POST['note']);
  10.     if($_SESSION['auth']['user']) $customer_id = $SESSION['auth']['customer_id']; // если в сессии есть авторизованный пользователь получаем его id
  11.    
  12.     if(!$_SESSION['auth']['user']){ // если посетитель не авторизованный
  13.         $error = ''; // флаг проверки пустых полей
  14.         $surname = clear($_POST['surname']);
  15.         $name = clear($_POST['name']);
  16.         $patronymic = clear($_POST['patronymic']);
  17.         $email = clear($_POST['email']);    
  18.        
  19.         if(empty($surname)) $error .= '<li><span>Не введена фамилия</span></li>';
  20.         if(empty($name)) $error .= '<li><span>Не введено имя</span></li>';
  21.         if(empty($patronymic)) $error .= '<li><span>Не введено отчество</span></li>';
  22.         if(empty($email)) $error .= '<li><span>Не введен e-mail</span></li>';
  23.         if(empty($phone)) $error .= '<li><span>Не введен телефон</span></li>';
  24.         if(empty($postcode)) $error .= '<li><span>Не введен индекс</span></li>';
  25.         if(empty($city)) $error .= '<li><span>Не введен город</span></li>';
  26.         if(empty($address)) $error .= '<li><span>Не введен адрес</span></li>';
  27.        
  28.         if(empty($error)){ // если ошибки отсутствуют
  29.             // добавляем гостя в заказчики (но без пароля для авторизации)
  30.             $customer_id = add_customer($surname, $name, $patronymic, $email, $phone, $postcode, $city, $address);
  31.             if(!$customer_id) return false; // прекращаем выполнение в случае ошибки добавления гостя
  32.         }else{
  33.             $_SESSION['btnOrder']['res'] = "<div class='error'>Все поля обязательны к заполнению:<br/><ul> $error </ul></div>";
  34.             $_SESSION['btnOrder']['surname'] = $surname;
  35.             $_SESSION['btnOrder']['name'] = $name;
  36.             $_SESSION['btnOrder']['patronymic'] = $patronymic;
  37.             $_SESSION['btnOrder']['email'] = $email;
  38.             $_SESSION['btnOrder']['phone'] = $phone;
  39.             $_SESSION['btnOrder']['postcode'] = $postcode;
  40.             $_SESSION['btnOrder']['city'] = $city;
  41.             $_SESSION['btnOrder']['address'] = $address;
  42.             $_SESSION['btnOrder']['note'] = $note;
  43.             return false;
  44.         }
  45.     }else{ // если посетитель авторизованный
  46.         $phone = clear($_POST['phone']);
  47.         $postcode = clear($_POST['postcode']);
  48.         $city = clear($_POST['city']);
  49.         $address = clear($_POST['address']);
  50.        
  51.         if(empty($phone)) $error .= '<li><span>Не введен телефон</span></li>';
  52.         if(empty($postcode)) $error .= '<li><span>Не введен индекс</span></li>';
  53.         if(empty($city)) $error .= '<li><span>Не введен город</span></li>';
  54.         if(empty($address)) $error .= '<li><span>Не введен адрес</span></li>';
  55.        
  56.         if(empty($error)){
  57.             // добавляем в БД недостающие данные - телефон, индекс, город, улица
  58.             function add_information(){
  59.             $query = "UPDATE customers SET phone = '$phone', postcode = '$postcode', city = '$city', address = '$address'
  60.                        WHERE customer_id = '$customer_id'";
  61.             $res = mysql_query($query) or die (mysql_error());
  62.             }
  63.         }else{
  64.             $_SESSION['btnOrder']['res'] = "<div class='error'>Все поля обязательны к заполнению:<br/><ul> $error </ul></div>";
  65.             $_SESSION['btnOrder']['phone'] = $phone;
  66.             $_SESSION['btnOrder']['postcode'] = $postcode;
  67.             $_SESSION['btnOrder']['city'] = $city;
  68.             $_SESSION['btnOrder']['address'] = $address;
  69.             $_SESSION['btnOrder']['note'] = $note;
  70.             return false;
  71.         }
  72.     }
  73.     save_order($customer_id, $dostavka_id, $note);
  74. }
  75. /* ==Добавление заказа== */
  76.  
  77. /* ==Добавление гостя== */
  78. function add_customer($surname, $name, $patronymic, $email, $phone, $postcode, $city, $address){
  79.     $query = "INSERT INTO customers (surname, name, patronymic, email, phone, postcode, city, address)
  80.                VALUES ('$surname', '$name', '$patronymic', '$email', '$phone', '$postcode', '$city', '$address')";
  81.     $res = mysql_query($query) or die(mysql_error());
  82.     if(mysql_affected_rows() > 0){
  83.         // если гость добавлен в базу данных - получаем его id
  84.         return mysql_insert_id();
  85.     }else{
  86.         // если гость не добавлен
  87.         $_SESSION['btnOrder']['res'] = "<div class='error'>Ой, что-то пошло не так... Пожалуйста, продублируйте ваш заказ!</div>";
  88.         $_SESSION['btnOrder']['surname'] = $surname;
  89.         $_SESSION['btnOrder']['name'] = $name;
  90.         $_SESSION['btnOrder']['patronymic'] = $patronymic;
  91.         $_SESSION['btnOrder']['email'] = $email;
  92.         $_SESSION['btnOrder']['phone'] = $phone;
  93.         $_SESSION['btnOrder']['postcode'] = $postcode;
  94.         $_SESSION['btnOrder']['city'] = $city;
  95.         $_SESSION['btnOrder']['address'] = $address;
  96.         $_SESSION['btnOrder']['note'] = $note;
  97.         return false;
  98.     }
  99. }
  100. /* ==Добавление гостя== */
  101.  
  102. /* ==Сохранение заказа== */
  103. function save_order($customer_id, $dostavka_id, $note){
  104.     $query = "INSERT INTO orders (`customer_id`, `date`, `dostavka_id`, `note`)
  105.                VALUES ($customer_id, NOW(), $dostavka_id, '$note')";
  106.     mysql_query($query) or die(mysql_error());
  107.     /*if(mysql_affected_rows() == -1){
  108.         // если не получилось сохранить заказ, то удаляем заказчика
  109.         mysql_query("DELETE FROM customers
  110.                         WHERE customer_id = $customer_id AND password = ''");
  111.                         return false;
  112.     }*/
  113.     $order_id = mysql_insert_id(); // id сохраненного заказа
  114.    
  115.     foreach($_SESSION['cart'] as $goods_id => $value){
  116.         $val .="($order_id, $goods_id, {$value['qty']}),";
  117.     }
  118.     $val = substr($val, 0, -1); // удаление запятой
  119.    
  120.     $query = "INSERT INTO zakaz_tovar (order_id, goods_id, quantity)
  121.                VALUES $val";
  122.     mysql_query($query) or die(mysql_error());
  123.     if(mysql_affected_rows() == -1){
  124.         // если не выгрузился заказ - удаляем сам заказ из таблицы orders
  125.         mysql_query("DELETE FROM orders WHERE order_id = $order_id");
  126.         return false;
  127.     }
  128.    
  129.     // если заказ успешно отправлен
  130.     unset($_SESSION['cart']);
  131.     unset($_SESSION['total_sum']);
  132.     unset($_SESSION['total_quantity']);
  133.     $_SESSION['btnOrder']['res'] = "<div class='success'>Все отлично - заказ передан в работу) Очень скоро он будет к вам отправлен!</div>";
  134.     return true;
  135. }
  136. /* ==Сохранение заказа== */


Пожалуйста, помогите разобраться!

Заранее спасибо!

(Отредактировано автором: 16 Декабря, 2014 - 11:47:16)

 
 Top
RickMan
Отправлено: 16 Декабря, 2014 - 11:48:02
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


Помог: 30 раз(а)




Проблема не там где вы указали, а в самом начале функции save_order. Проверьте $customer_id. Возможно он приходит пустой, и получается запрос формата ( , NOW(), 2, 4) - а это как ни как ошибка.
 
 Top
EVGENphp
Отправлено: 16 Декабря, 2014 - 11:53:39
Post Id


Новичок


Покинул форум
Сообщений всего: 13
Дата рег-ции: Дек. 2014  


Помог: 0 раз(а)




RickMan пишет:
Проблема не там где вы указали, а в самом начале функции save_order. Проверьте $customer_id. Возможно он приходит пустой, и получается запрос формата ( , NOW(), 2, 4) - а это как ни как ошибка.


Тоже была такая мысль. Писал так:

PHP:
скопировать код в буфер обмена
  1. function add_information(){
  2.             $query = "UPDATE customers SET phone = '$phone', postcode = '$postcode', city = '$city', address = '$address'
  3.                        WHERE customer_id = '$customer_id'";
  4. if(!$customer_id) return false;


и даже делал

Ошибки не было.

Также явно задавал:
PHP:
скопировать код в буфер обмена
  1. $customer_id = $SESSION['auth']['customer_id'];
перед $query

Может просто не так customer_id возвращаю. Пока очень не силен в синтаксисе...
(Добавление)
RickMan пишет:
Проблема не там где вы указали, а в самом начале функции save_order. Проверьте $customer_id. Возможно он приходит пустой, и получается запрос формата ( , NOW(), 2, 4) - а это как ни как ошибка.


Самое интересное, что если бы он был пустой, у меня бы и у не авторизованного пользователя заказ не проходил. А он отрабатывается как положено. Почему-то проблема только когда я заказываю авторизованным пользователем.
(Добавление)
Дело было не в бабине... Закатив глазки

Проблему нашел. Писал:
PHP:
скопировать код в буфер обмена
  1. $customer_id = $SESSION['auth']['customer_id']
, а надо:
PHP:
скопировать код в буфер обмена
  1. $customer_id = $_SESSION['auth']['customer_id']


Ошибки неопытного...
 
 Top
Мелкий Супермодератор
Отправлено: 16 Декабря, 2014 - 14:16:01
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Включите E_NOTICE и error_reporting (а лучше сразу в значение -1) - вам бы PHP сам написал, что тут написана какая-то глупость.


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB