За последние 24 часа нас посетили 42483 программиста и 1816 роботов. Сейчас ищут 835 программистов ...

Занесение в таблицы при связи многие ко многим

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

  1. RazerVG

    RazerVG Активный пользователь

    С нами с:
    5 дек 2013
    Сообщения:
    103
    Симпатии:
    0
    У меня есть 3 таблицы: Товары, Товары в заказе, Заказы;

    При добавление нового заказа я вношу запись в Таблицу заказы:

    Код (Text):
    1.     if($_SESSIONN['cart'] && $_SESSION['email'] && isset($_POST['order']){
    2.         $id = $_SESSION['id'];
    3.         $data  = data("Y-m-d H:i:s");
    4.         $status = "Новый";
    5.         $price = $price_order;
    6.        
    7.         $query = mysql_query("INSERT INTO orders(id_client, price_order, data_order, status) VALUES ('$id','$price','$data','$status')");
    8.    
    Далее мы перебераем сессию корзины и вводим в таблицу Товары в заказе id-шники товаров в магазине и их количество в заказе.

    Код (Text):
    1.  
    2.         foreach($_SESSION['cart'] as $id => $quantity):
    3.        
    4.         $product = get_product($id);
    5.        
    6.         $query = mysql_query("INSERT INTO items_in_orders(id_item_in_shop, id_order_in_shop, quantity_item_in_order) VALUES ('{$product['id']}', ???, '$quantity')");
    7.        
    8.         endforeach;
    Добавлено спустя 52 секунды:
    Вопрос: Как засовывать постоянный id заказа?
     
  2. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    при завершении работы с корзиной записать инфу о заказе и получить идентификатор заказа в таблице заказов. вполне логично что это должен быть первичный ключ с автоинкрементом. а потом уже итерируя контент корзины записать состав заказа. если сложить ваши два куска кода то логика у вас такая и есть. проблема я так понимаю в том что вы не знаете какой получился идентификатор заказа? mysqli_insert_id поищите.
     
  3. RazerVG

    RazerVG Активный пользователь

    С нами с:
    5 дек 2013
    Сообщения:
    103
    Симпатии:
    0
    Ну первое я создаю заказ, Там есть поле id_order. Оно автоинкремент. Теперь получается я его должен получить функцией mysqli_insert_id. И перебирая сессию корзины, просто вставлять его в запрос

    Добавлено спустя 7 минут 12 секунд:
    Как я понял

    Код (Text):
    1.  if($_SESSIONN['cart'] && $_SESSION['email'] && isset($_POST['order']){
    2.        
    3.         $id_client = $_SESSION['id'];
    4.         $data  = data("Y-m-d H:i:s");
    5.         $status = "Новый";
    6.         $price = $price_order;
    7.        
    8.         $query = mysql_query("INSERT INTO orders(id_client, price_order, data_order, status) VALUES ('$id_client','$price','$data','$status')");
    9.    
    10.         $id_order_in_shop = mysql_insert_id();
    11.        
    12.        
    13.         foreach($_SESSION['cart'] as $id => $quantity):
    14.        
    15.         $product = get_product($id);
    16.        
    17.         $query = mysql_query("INSERT INTO orders(id_item_in_shop, id_order_in_shop, quantity_item_in_order) VALUES ('{$product['id']}',
    18.             '$id_order_in_shop', '$quantity')");
    19.        
    20.         endforeach;
    21.     }
     
  4. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ну так заработало как надо?
     
  5. RazerVG

    RazerVG Активный пользователь

    С нами с:
    5 дек 2013
    Сообщения:
    103
    Симпатии:
    0
    Ничего не работает проверил все. Имена таблиц и полей правильные не в этом ошибка.

    Код (Text):
    1. <?php
    2.  
    3.           if($_SESSION['cart'] && $_SESSION['email'] && isset($_POST['order'])){
    4.  
    5.               db_connect();
    6.               $id_client = $_SESSION['id'];
    7.               $data  = data("Y-m-d H:i:s");
    8.               $status = "Новый";
    9.               $price = number_format($_SESSION['total_price'],2);
    10.  
    11.               $query = mysql_query("INSERT INTO orders_in_shop (id_client, price_order, data_order, status) VALUES ('$id_client','$price','$data','$status')");
    12.  
    13.               $id_order_in_shop = mysql_insert_id();
    14.  
    15.  
    16.               foreach($_SESSION['cart'] as $id => $quantity):
    17.  
    18.                   $product = get_product($id);
    19.  
    20.                   $query = mysql_query("INSERT INTO items_in_orders (id_item_in_shop, id_order_in_shop, quantity_item_in_order) VALUES ('{$product['id']}',
    21.                   '$id_order_in_shop', '$quantity')");
    22.  
    23.               endforeach;
    24.           }
    25.         ?>
     
  6. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    во-первых, проверяете ли вы успешность запросов?
    во-вторых, проверяете ли вы что именно у вас в запросах? например меня смущает строка $product = get_product($id); - получается что в корзине хранится какая-то хрень которую потом приходится дополнительно обрабатывать функцией которая судя по строке {$product['id']} возвращает массив.

    в логике наверное ошибка.
     
  7. RazerVG

    RazerVG Активный пользователь

    С нами с:
    5 дек 2013
    Сообщения:
    103
    Симпатии:
    0
    Fatal error: Call to undefined function data() in /Applications/MAMP/htdocs/odeonsite/views/pages/order.php on line 63 вот ошибка в чем.
     
  8. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Date она
     
  9. RazerVG

    RazerVG Активный пользователь

    С нами с:
    5 дек 2013
    Сообщения:
    103
    Симпатии:
    0
    Всем спасибо вот готовый скрипт

    Код (Text):
    1. <?php
    2.  
    3.           if(isset($_POST['order']) && $_SESSION['total_price'] && $_SESSION['id']){
    4.               $status = "Новый";
    5.  
    6.               $price = $_SESSION['total_price'];
    7.  
    8.               $data  = date("Y-m-d H:i:s");
    9.  
    10.               $id_client = $_SESSION['id'];
    11.  
    12.               $query = mysql_query("INSERT INTO orders_in_shop (id_client, price_order, status, data_order) VALUES ('$id_client','$price','$status', '$data')");
    13.  
    14.               $id_order_in_shop = mysql_insert_id();
    15.  
    16.               foreach($_SESSION['cart'] as $id => $quantity):
    17.  
    18.                   $query = mysql_query("INSERT INTO items_in_orders (id_item_in_shop, id_order_in_shop, quantity_item_in_order) VALUES ('$id',
    19.                   '$id_order_in_shop', '$quantity')");
    20.  
    21.               endforeach;
    22.           }
    23.         ?>