添加新的会话产品 - PHP

时间:2009-12-06 10:24:58

标签: php mysql

当用户购买产品(假设他们有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 个答案:

答案 0 :(得分:2)

为什么不在表示的产品数组中添加标记键 无论是否插入产品,在插入产品之前,请检查标记。

如果你甚至不能这样做,那么创建另一个包含已插入的产品id的会话数组(称之为inserted_ids),并检查product_id是否在{{1}中数组。

(你可以使用in_array,你不需要为此做一个全新的循环)。

这应该是你的代码:

inserted_ids

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

答案 1 :(得分: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 ...