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