【问题标题】:only last row is inserting in database只有最后一行插入数据库
【发布时间】:2015-01-21 05:59:44
【问题描述】:

我有采购订单表格,我在会话中存储产品详细信息,即产品名称、数量、费率等,并将其保存到数据库中。在编辑采购订单时,从数据库中获取产品详细信息并将其存储在会话中,并将新产品详细信息附加到会话数组中。它工作正常。但是当我提交表单时,只有最后一条记录,即新添加的记录被插入到数据库中。

这里你可以假设我在下订单后正在编辑购物车。 我的问题是在下订单后添加,删除购物车中的商品在逻辑上是否正确?如果是,那么如何?

这是我保存和更新采购订单的代码。

  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;
    }

【问题讨论】:

  • 你在哪里定义了$purchase_id??
  • @IndrasinhBihola 请看我上面的编辑..
  • 您的内部查询基于$purchase_id,在整个过程中保持不变,这是一个问题。
  • @IndrasinhBihola 采购订单和产品详细信息是两个不同的表格。我想在更新采购订单时更新产品详细信息表。
  • 你能告诉我你两个表的结构吗?详细说明您要做什么。

标签: php codeigniter session


【解决方案1】:

你已经放了(其中 purchase_id='$purchase_id'") 因此,当循环上次执行时,它会更新 purchase_id 为 $purchase_id 的所有记录

【讨论】:

    【解决方案2】:

    您的查询:

    $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 循环中,那么它将根据您的需要插入适当的记录。

    希望这会对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-13
      • 2011-08-02
      相关资源
      最近更新 更多