我有采购订单表格,我在会话中存储产品详细信息,即产品名称,数量,费率等,并将其保存到数据库。在编辑采购订单时,从数据库获取产品详细信息并将其存储在会话中,并将新产品详细信息附加到会话阵列。它工作正常。但是当我提交表格时,只有最后一条记录即新添加的记录被插入数据库中。
在这里,您可以假设我在下订单后正在编辑购物车。 我的问题是,在下订单后添加,删除购物车中的商品在逻辑上是否正确?如果是,那么如何?
这是我保存和更新采购订单的代码。
function save(&$purchase_data,$purchase_id)
{
$success=false;
//Run these queries as a transaction, we want to make sure we do all or nothing
$this->db->trans_start();
if($purchase_data)
{
if (!$purchase_id or !$this->exists($purchase_id))
{
//$purchase_data['purchase_id'] = $purchase_id = $purchase_data['purchase_id'];
$success = $this->db->insert('purchase_order',$purchase_data);
$post_array['cart']=$this->session->userdata('data');
/*print_r($post_array);
exit;*/
$purchase_id=$this->db->insert_id();
$i=0;
foreach($post_array['cart'] as $item)
{
//echo "<pre>"; print_r($item); echo "</pre>";
$query = $this->db->query("SELECT name FROM phppos_items WHERE item_id='".$item['product_id']."'");
foreach ($query->result() as $row)
{
$product_name=$row->name;
}
$product_id=$item['product_id'];
$quantity=$item['quantity'];
$unit=$item['unit'];
$unit_rate=$item['unit_rate'];
$query = $this->db->query("insert into phppos_productdetails(product_id,product_name,quantity,unit,unit_rate,purchase_id) values ('$product_id','$product_name','$quantity','$unit','$unit_rate','$purchase_id')");
$i++;
}
}
else
{
$this->db->where('purchase_id', $purchase_id);
$success = $this->db->update('purchase_order',$purchase_data);
//$this->session->set_userdata('sess_products');
$post_array['cart']=$this->session->userdata('sess_products');
$i=0;
foreach($post_array['cart'] as $item)
{
echo "<pre>"; print_r($item); echo "</pre>";
$query = $this->db->query("SELECT name FROM phppos_items WHERE item_id='".$item['product_id']."'");
foreach ($query->result() as $row)
{
$product_name=$row->name;
}
$product_id=$item['product_id'];
$quantity=$item['quantity'];
$unit=$item['unit'];
$unit_rate=$item['unit_rate'];
$query = $this->db->query("update phppos_productdetails set product_id='$product_id',product_name='$product_name',quantity='$quantity',unit='$unit',unit_rate='$unit_rate' where purchase_id='$purchase_id'");
$i++;
}
}
}
$this->db->trans_complete();
return $success;
}
答案 0 :(得分:0)
您的查询:
$query = $this->db->query("update phppos_productdetails set product_name='$product_name',product_id='$product_id',quantity='$quantity',unit='$unit',unit_rate='$unit_rate' where purchase_id='$purchase_id'");"
通过查看上面的查询,此查询中使用的参数(如 $ product_name )超出内部foreach范围。
因此它只需要最后一条记录并将其插入数据库。
如果您将此查询放在内部foreach循环中,那么它将根据您的要求插入适当的记录。
希望这会对你有所帮助。
答案 1 :(得分:0)
你已经把(其中purchase_id ='$ purchase_id'“) 因此,当循环执行上次时,它将purchase_id更新为$ purchase_id
的所有记录