2009-12-06 130 views
1

(可以說他們有3個產品),他們已經輸入他們的信息,產品自動進入數據庫狀態= 0添加新的會議產品 - 當用戶購買產品,PHP

如果用戶正在遠離籃子,讓我們假設進入產品概覽(併購買額外的產品,現在他們在籃子中有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; 
             "); 
        } 


        } 
     } 
+0

你給我們提供了錯誤的代碼示例嗎?因爲我看不到產品插入數據庫的部分。如果您再次輸入用戶信息將是沒有意義的。 – svens 2009-12-06 10:31:11

+0

嗯..在session var中設置插入的標誌可能是一個便宜的工作解決方案。 – svens 2009-12-06 11:13:47

回答

2

你爲什麼不添加標記關鍵是你的產品陣列表示 產品是否被插入或沒有,那麼你插入產品之前,檢查該標誌。

如果你甚至不能做到這一點,然後再創建另一個會話陣列(稱之爲inserted_ids),它保存插入的產品ID,並檢查product_idinserted_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

我更新了代碼,你能告訴我如何在你的回答中插入代碼嗎? ...我完全失去了: - / – william 2009-12-07 02:26:06

0

添加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 ...