Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
添加新的会话产品-PHP_Php_Mysql - Fatal编程技术网

添加新的会话产品-PHP

添加新的会话产品-PHP,php,mysql,Php,Mysql,当用户购买一个产品(假设他们有3个产品)并输入了信息时,该产品会自动进入数据库,状态为0 如果用户要离开购物篮,让我们在产品概述中假设一下(购买一个额外的产品,现在他们在购物篮中有4个产品) 我必须找出如何将新产品添加到数据库中,而不是插入所有产品+新产品,因为已经插入了3个产品 $_SESSION['inserted_ids'] = array(); $id = ''; if( in_array( $id, $_SESSION['inserted_ids'

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


                  }
        }

为什么不在产品数组中添加一个标志键来表示 无论是否插入了产品,在插入产品之前,请检查标志

如果您甚至不能这样做,那么创建另一个会话数组(称之为
inserted\u id
)来保存插入的产品id,并检查
产品id
是否在
inserted\u id
数组中

(您只需在_数组中使用,无需为此执行全新的循环)

这应该是您的代码:

$\u会话['inserted\u id']=array();//先执行这一行,然后再执行其他操作。

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."'
                ");
          }

UNIQUE
约束添加到
订单行
表中,然后在发现重复项时更新该行:

ALTER TABLE order\u line添加唯一(订单id、产品id)

然后,在添加订单行时,使用重复密钥更新上的
语句:

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

您给我们提供了错误的代码示例吗?因为我看不到将产品插入数据库的部分。如果你再次输入用户信息,那就没有意义了。嗯。。在会话变量中设置一个插入标志可能是一个便宜但有效的解决方案。我更新了代码,你能告诉我如何像你在回答时那样插入代码吗。。。我完全迷路了:-/