За последние 24 часа нас посетили 20538 программистов и 1102 робота. Сейчас ищут 825 программистов ...

Как занести в БД два товара одного заказа

Тема в разделе "PHP для новичков", создана пользователем arhat78, 2 апр 2022.

Метки:
  1. arhat78

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

    С нами с:
    11 июн 2014
    Сообщения:
    26
    Симпатии:
    0
    Всем привет! Голову сломал, но так и не решил: пытаюсь занести в БД через INSERT два товара одного заказа, но в таблицу попадает только один товар, две строчки никак...

    PHP:
    1. function saveOrder( $uid, $n, $p, $e, $a, $prod_id, $title,$dt){
    2.         global $link,$basket;
    3.         $goods = myBasket();basketInit(); $uid=$basket['orderid'];
    4.         foreach($goods as $item):
    5.        
    6.         $stmt = mysqli_stmt_init($link);
    7.         $sql = 'INSERT INTO `orders`( uid, `name`, `phone`, `email`, `address`,`prod_id`, `title`, datetime)VALUES (?,?,?,?,?,?,?,?)';
    8.         if(!$stmt = mysqli_prepare($link, $sql))
    9.           return false;
    10.         mysqli_stmt_bind_param($stmt, "ssssssss",$basket['orderid'], $n, $p, $e, $a,$item['prod_id'], $item['title'],$dt);
    11.         mysqli_stmt_execute($stmt);
    12.         mysqli_stmt_close($stmt);
    13.         return true;  
    14.          
    15.       endforeach;    
    16.            
    17.         mysqli_stmt_close($stmt);
    18.         setcookie('basket','',time()-3600);
    19.         return true;
    20.     }
    21.  
    22.  
    23. $goods = myBasket();
    24.     $n = clearStr($_POST['name']);
    25.     $p = clearStr($_POST['phone']);
    26.     $e = clearStr($_POST['email']);
    27.     $a = clearStr($_POST['address']); $dt=date('Y-m-j H:i:s');
    28.     foreach ($goods as $item):
    29.     $prod_id=$item['prod_id'];
    30.     $title=$item['title'];
    31.    $uid=$basket['orderid'];
    32.     endforeach;
    33.    
    34.     if(!saveOrder( $uid,$n, $p, $e, $a, $prod_id,$title,$dt)) {
    35.         echo 'Произошла ошибка при добавлении товара!';
    36.        }
    37.        else{
    38.         echo 'Товар успешно добавлен';
    39.        }
    40.      
    41. ?>
    Структура таблицы orders:

    PHP:
    1. id  INT(11) NO  PRI  NULL
    2.     AUTO_INCREMENT
    3. uid VARCHAR(11) NO      NULL
    4.        
    5. name    VARCHAR(230)    NO       NULL
    6.        
    7. phone   VARCHAR(230)    NO       NULL
    8.        
    9. email   VARCHAR(100)    NO      NULL
    10.        
    11. address VARCHAR(100)    NO       NULL
    12.        
    13. prod_id INT(11) NO      NULL
    14.        
    15. title   VARCHAR(100)    NO      NULL
    16.        
    17. datetime    TIMESTAMP   NO       NULL
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    Думай

    2022-04-02_20-43-22.png
     
    arhat78 нравится это.
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    PHP:
    1. <?php
    2.  
    3. use Nouvu\Database\{ Lerma, LermaStatement, DriverEnum };
    4.  
    5. // vendor...
    6.  
    7. $connect = Lerma :: create( driver: DriverEnum :: MySQLi )
    8.     -> setData(
    9.         host: '127.0.0.1',
    10.         username: 'root',
    11.         password: 'root'
    12.     )
    13.     -> setDatabaseName( 'php_test' )
    14.     -> setCharset( 'utf8' )
    15.     -> setPort( 3306 )
    16.     -> getLerma();
    17.  
    18.  
    19. $items = [
    20.     [ 'Bar', 111 ],
    21.     [ 'Foo', 222 ],
    22. ];
    23.  
    24. $sql = 'INSERT INTO `test`( `name`, `value` ) VALUES ( ?, ? )';
    25.  
    26. $connect -> prepare( $sql, $items );
    Но это лишь фасад над mysqli. Используй PDO
     
    arhat78 нравится это.
  4. arhat78

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

    С нами с:
    11 июн 2014
    Сообщения:
    26
    Симпатии:
    0
    Точно, благодарю! Не там цикл закончил! Бьюсь второй день, а оказыватся из-за такой "мелочи" сразу две проблемы решились! :)

    Про вышеизложенный код и PDO пока ничего не понял, нужно изучать.....

    Можно ещё вопрос, как к профессионалу - раньше, пока не начала исправлять, изучать код с записью в БД, при отправке заказа в корзине товар, куки обнулялись, а сейчас товар так и остаётся в корзине.....
    продолжение моего кода:
    PHP:
    1. if(!mysqli_stmt_prepare($stmt,$sql))
    2.           return false ;
    3.        
    4.         setcookie('basket','',time()-3600);
    5.         return true;
     
    #4 arhat78, 3 апр 2022
    Последнее редактирование: 3 апр 2022
  5. arhat78

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

    С нами с:
    11 июн 2014
    Сообщения:
    26
    Симпатии:
    0
    Тоже разобрался - здесь тоже цикл не там закончил..... o_O
     
    #5 arhat78, 3 апр 2022
    Последнее редактирование: 3 апр 2022
  6. antoniii

    antoniii Новичок

    С нами с:
    16 мар 2022
    Сообщения:
    417
    Симпатии:
    71
    Объясни пожалуйста смысл выражения: