if внутри запроса

peretc001

Новичок
)
ладно, возвращаемся к началу:

PHP:
# Проверяем наличие ранее оформленного заказа данным покупателем
    $add_zakaz_select = mysql_query("SELECT * FROM zakaz_test WHERE sid = '$sid' ");
    $row = mysql_fetch_assoc($add_zakaz_select);
 
    # Если заказа не было - добавляем
    if ( $row == null ) {
        $add_zakaz_select = mysql_query("SELECT * FROM cart WHERE sid = '$sid' ");
            while($row = mysql_fetch_assoc($add_zakaz_select)) {
         
                $insert = mysql_query("INSERT INTO zakaz_test (id, product_id, name, model, img, qty, price, color, sid, date, total, user_id)
                VALUES ('$last_id', '$row[id]', '$row[name]', '$row[model]', '$row[img]', '$row[qty]', '$row[price]', '$row[color]', '$row[sid]', '$row[date]', '$row[total]', '$last_user_id') ");                         
        }
    }
    else {
     

$add_zakaz_select = mysql_query("SELECT * FROM cart WHERE sid = '$sid' ");
            while($row = mysql_fetch_assoc($add_zakaz_select)) {
            # При обновлении все товары меняются на один и тот же.
            $result = mysql_query("UPDATE `zakaz_test` SET product_id = '$row[id]',  name = '$row[name]',  model = '$row[model]', img = '$row[img]', qty = '$row[img]', price = '$row[price]', color = '$row[color]', total = '$total', user_id = '$last_user_id' WHERE sid = '". session_id() ."' ");
        }
}
        # Работает следующая конструкция, но проблема с id, т.к. он при каждом обновлении меняется на id+1
        #Удаляем ранее оформленный заказ
        $delete = mysql_query("DELETE FROM zakaz_test WHERE sid = '$sid' ");
     
        # Записываем заново исправленный
        $add_zakaz_select = mysql_query("SELECT * FROM cart WHERE sid = '$sid' ");
            while($row = mysql_fetch_assoc($add_zakaz_select)) {
         
                $insert = mysql_query("INSERT INTO zakaz_test (id, product_id, name, model, img, qty, price, color, sid, date, total, user_id)
                VALUES ('$last_id', '$row[id]', '$row[name]', '$row[model]', '$row[img]', '$row[qty]', '$row[price]', '$row[color]', '$row[sid]', '$row[date]', '$row[total]', '$last_user_id') ");
Как сделать UPDATE таблицы zakaz_test из cart при наличии в корзине более 1 товара?
 

antson

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

Breeze

goshogun
Команда форума
Партнер клуба
Человек просто не представляет себе, что такое race condition
last_insert_id мне не подходит
человек не понимает или не знает, как работает auto_increment
он хочет его в явном виде вставлять, напрямую

хотя достаточно сделать
PHP:
$add = mysql_query("INSERT INTO user (user_firstname, user_lastname, user_middlename, phone, mail, city, msg, sid) VALUES ('$_POST[user_firstname]', '$_POST[user_lastname]', '$_POST[user_middlename]', '$_POST[phone]', '$_POST[mail]', '$_POST[city]', '$_POST[msg]', '$sid' ) ");
$user_id = mysql_insert_id();
т.е. не указывать поле id при вставке.

Про пипец с прямой вставкой данных из post отдельный разговор.
 

peretc001

Новичок
я немного переделал с тех пор.

Раз поле auto_increment само подставляет следующее значение, то мне не нужно его определять, т.е. не нужен не mysql_insert_id не select max(id)

данные покупателя:
PHP:
# Записываем данные покупателя
    $res = mysql_query(" SELECT * FROM user WHERE sid = '$sid' ");
    $row = mysql_fetch_assoc($res);

    # Если такого нет - записываем
    if ($row == null ) {
        $add_user = mysql_query("INSERT INTO `user` (id, lastname, firstname, middlename, phone, email, city, msg, sid, date) VALUES ('', '$_POST[lastname]', '$_POST[firstname]', '$_POST[middlename]', '$_POST[phone]', '$_POST[email]', '$_POST[city]', '$_POST[msg]', '$sid', '$date' ) ");

    }
    # Если есть - обновляем
    else {
        $upd_user = mysql_query("UPDATE `user` SET lastname = '$_POST[lastname]', firstname = '$_POST[firstname]', middlename = '$_POST[middlename]', phone = '$_POST[phone]', email = '$_POST[email]', city = '$_POST[city]', msg = '$_POST[msg]', date = '$date' WHERE sid = '$row[sid]' ");                    

    }
И все что касается заказа:

PHP:
# Номер договора, т.е. номер ранее записанного user`а
    $res = mysql_query(" SELECT * FROM user WHERE sid = '$sid' ");
    $row = mysql_fetch_assoc($res);
    $OrderId = $row['id'];


    # Проверяем наличие ранее оформленного заказа данным покупателем
    $add_zakaz_select = mysql_query("SELECT * FROM zakaz_new WHERE sid = '$sid' ");
    $row = mysql_fetch_assoc($add_zakaz_select);

    # Если заказа не было - добавляем
    if ( $row == null ) {
    
        $insert = mysql_query("INSERT INTO zakaz_new (id, product_id, name, model, url, img, qty, price, color, sid, date, total, user_id)
        SELECT '', id, name, model, url, img, qty, price, color, sid, date, total, '" .$OrderId ."' FROM cart WHERE sid = '$sid' ");
    }
    else {
    
        # Удаляем ранее оформленный заказ
        $delete = mysql_query("DELETE FROM zakaz_new WHERE sid = '$sid' ");
    
        $insert = mysql_query("INSERT INTO zakaz_new (id, product_id, name, model, url, img, qty, price, color, sid, date, total, user_id)
        SELECT '', id, name, model, url, img, qty, price, color, sid, date, total, '". $OrderId ."' FROM cart WHERE sid = '$sid' ");

    }
 
Последнее редактирование:

Фанат

oncle terrible
Команда форума
а я ведь уже давно предлагал тупо закрывать все вопросы с классическим говнокодом.
времени убивается много, а владелец и ныне там

потому что ему не надо нормальную стркутуру
ему не надо нормальный код

от пришел за костылем. а костыля ему здесь не дадут

в итоге получаются только нервы и трата времени

пускай идет на какой-нибудь пхп су или руселлер и там окормляется у себе подобных
 

peretc001

Новичок
не ругайся, дедуля))
я ж просил выше чтоб мне объяснили.

чем у меня не нормальная структура? есть база product, user, zakaz
Товары из корзины переносятся в zakaz, где id usera, заказавшего товар, равно id заказа (т.е. user_id)

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

Вот и подскажите, что не так у меня.
Чем плоха прямой вставкой данных из post?
 

AnrDaemon

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

peretc001

Новичок
Извините что долго не было, я целую неделю SELECT лекарства FROM аптека, INSERT INTO организм VALUES лекарства и UPDATE кошелек SET money = money - 1000 :)

Подключил класс
PHP:
require_once "safemysql.class.php";
Там прописываем user,pas,db

Пробуем:
PHP:
$db = new SafeMySQL();
$firstname = $db->safesql( strip_tags($_POST['firstname']) );
Выдает ошибку:
Fatal error: Uncaught exception 'Exception' with message 'SafeMySQL: 1045 Access denied for user .... @'localhost' (using password: YES)' in
/var/www/vhosts/u1730440.plsk.regruhosting.ru/httpdocs/.../shop/inc/safemysql.class.php:580 Stack trace: #0
/var/www/vhosts/u1730440.plsk.regruhosting.ru/httpdocs/.../shop/inc/safemysql.class.php(110): SafeMySQL->error('1045 Access den...') #1
/var/www/vhosts/u1730440.plsk.regruhosting.ru/httpdocs/.../shop/inc/zakaz2.php(12): SafeMySQL->__construct() #2 {main} thrown in
/var/www/vhosts/u1730440.plsk.regruhosting.ru/httpdocs/.../shop/inc/safemysql.class.php on line 580

Если не указывать $db = new SafeMySQL();
Выдает ошибку
Notice: Undefined variable: db in /var/www/vhosts/u1730440.plsk.regruhosting.ru/httpdocs/.../shop/inc/zakaz2.php on line 16

Fatal error: Call to a member function safesql() on a non-object in /var/www/vhosts/u1730440.plsk.regruhosting.ru/httpdocs/.../shop/inc/zakaz2.php on line 16

Пробовал и локально и на сайте
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Перевести типа ошибку?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
гугл тебе в помощь) там есть переводчик
 
Сверху