добавить новый сессионный продукт - PHP - PullRequest
1 голос
/ 06 декабря 2009

Когда пользователь покупает продукт (скажем, у него есть 3 продукта), и он ввел свою информацию, продукт автоматически попадает в базу данных со статусом = 0.

Если пользователь уходит из корзины, давайте перейдем к обзору продуктов (и покупая дополнительный продукт, теперь у него есть 4 продукта в корзине).

Мне нужно выяснить, как добавить новый товар в базу данных вместо того, чтобы вставлять все товары + новый, потому что 3 товара уже вставлены.

$_SESSION['inserted_ids'] = array();
        $id = '';   
        if( in_array( $id, $_SESSION['inserted_ids']) ){
             return;
        }else{

            $id = $db->Insert("INSERT INTO orders SET 
                       name    = '". $_SESSION['information']['name'] ."',
                       address = '". $_SESSION['information']['address'] ."',
                       date    = '". Database::Now() ."',
                       phone   = '". (isset($_SESSION['information']['phone']) ? $_SESSION['information']['phone']:'') ."',
                       email   = '".  $_SESSION['information']['email'] ."',
                       city    = '".  $_SESSION['information']['city'] ."',
                       zipcode = '".  $_SESSION['information']['zipcode']."'
            ");

            $_SESSION['inserted_ids'][] = (int) $id;


              # lists products
              $list = '';
              $grand_total = '';
              $res = $db->Execute("sql with product_id");
                while($row = $res->GetNext()){


                    if( $row['product_id'] == $_SESSION['inserted_ids'] ){
                         $db->Execute("INSERT INTO order_lines SET 

                                          price         = '$round_price', 
                                          order_id      =  $id,
                                          product_id    =  $product_id, 
                                          product_name  = '$product_name',
                                          units         = '$grand_units', 
                                          status        = '0',
                                          date          = '".Database::Now()."', 
                                          item_num      = '".$item_num."';

                                          ON DUPLICATE KEY UPDATE SET 
                                              units = '$grand_units' 

                                          WHERE order_id = $id
                                          LIMIT 1;
                                      ");
                    }


                  }
        }

Ответы [ 2 ]

2 голосов
/ 06 декабря 2009

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

Если вы даже не можете этого сделать, то создайте еще один массив сеансов (назовите его inserted_ids), который содержит вставленные идентификаторы продуктов, и проверьте, находится ли product_id в массиве inserted_ids.

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

Это должен быть ваш код:

$_SESSION[ 'inserted_ids' ] = array(); // execute this line before everything else.

if( in_array( $id, $_SESSION[ 'inserted_ids' ] ) {
     return;
}
$id = $db->Insert("INSERT INTO orders SET 
               name    = '". $_SESSION['information']['name'] ."',
               address = '". $_SESSION['information']['address'] ."',
               date    = '". Database::Now() ."',
               phone   = '". (isset($_SESSION['information']['phone']) ? $_SESSION['information']['phone']:'') ."',
               email   = '".  $_SESSION['information']['email'] ."',
               city    = '".  $_SESSION['information']['city'] ."',
               zipcode = '".  $_SESSION['information']['zipcode']."'
   ");

$_SESSION['inserted_ids'][] = $id;

      $res = $db->Execute("sql statment");
while($row = $res->GetNext()){

 $db->Insert("INSERT INTO order_lines SET 

                          price         = '$round_price', 
                          order_id      = '".$id."',
                          product_id    = '$product_id', 
                          product_name  = '$product_name',
                          units         = '$grand_units', 
                          status        = '0',
                          date          = '".Database::Now()."', 
                          item_num      = '".$item_num."'
                ");
          }
0 голосов
/ 07 декабря 2009

Добавьте ограничение UNIQUE в таблицу order_lines, а затем обновите эту строку при обнаружении дубликата:

ALTER TABLE order_lines ADD UNIQUE(order_id, product_id)

Затем, при добавлении order_line, используйте оператор ON DUPLICATE KEY UPDATE:

INSERT INTO order_lines SET
 price= 2.22,
 order_id= 2,
 product_id= 3,
 status = 0,
 ... other columns ...
ON DUPLICATE KEY UPDATE SET
 price= 2.22, 
 grand_unit= 4,
 ... other columns ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...