【问题标题】:add new session product - PHP添加新的会话产品 - PHP
【发布时间】:2009-12-06 10:24:58
【问题描述】:

当用户购买产品(假设他们有 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;
                                      ");
                    }


                  }
        }

【问题讨论】:

  • 您是否给我们提供了错误的代码示例?因为我看不到将产品插入数据库的部分。再输入用户信息就没有意义了。
  • 嗯.. 在会话变量中设置插入的标志可能是一种廉价但可行的解决方案。

标签: php mysql


【解决方案1】:

你为什么不向你的产品数组添加一个标志键来表示 是否插入产品,然后在插入产品之前检查标志。

如果您甚至不能这样做,则创建另一个会话数组(称为 inserted_ids )来保存插入的产品 ID,并检查 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."'
                ");
          }

【讨论】:

  • 我更新了代码,你能告诉我如何插入你在答案中显示的代码吗? ...我完全迷路了:-/
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 2015-07-21
    • 1970-01-01
    • 2022-08-20
    • 2023-01-01
    • 2012-03-23
    相关资源
    最近更新 更多