添加新的会话产品-PHP
当用户购买一个产品(假设他们有3个产品)并输入了信息时,该产品会自动进入数据库,状态为0 如果用户要离开购物篮,让我们在产品概述中假设一下(购买一个额外的产品,现在他们在购物篮中有4个产品) 我必须找出如何将新产品添加到数据库中,而不是插入所有产品+新产品,因为已经插入了3个产品添加新的会话产品-PHP,php,mysql,Php,Mysql,当用户购买一个产品(假设他们有3个产品)并输入了信息时,该产品会自动进入数据库,状态为0 如果用户要离开购物篮,让我们在产品概述中假设一下(购买一个额外的产品,现在他们在购物篮中有4个产品) 我必须找出如何将新产品添加到数据库中,而不是插入所有产品+新产品,因为已经插入了3个产品 $_SESSION['inserted_ids'] = array(); $id = ''; if( in_array( $id, $_SESSION['inserted_ids'
$_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 ...
您给我们提供了错误的代码示例吗?因为我看不到将产品插入数据库的部分。如果你再次输入用户信息,那就没有意义了。嗯。。在会话变量中设置一个插入标志可能是一个便宜但有效的解决方案。我更新了代码,你能告诉我如何像你在回答时那样插入代码吗。。。我完全迷路了:-/