user3752230
user3752230

Reputation: 49

Array insert error in codeigniter

My following Model is for insert array in db. I have also submit view file example. Please help to insert batch data in codeigniter with loop.

class Purchase_model extends CI_Model{

  public function purchase(){
  $price = $this->input->post('price');
  $quantity = $this->input->post('quantity');
  $date = $this->input->post('date');
     $vendor_name = $this->input->post('vendor_name');
     $model = $this->input->post('model');

    $invoice_no = $this->input->post('invoice');
    $temp = count($this->input->post('vendor_name'));
  for($i=0; $i<$temp; $i++){
  $data = array(
     'date'=>$date[$i], 
     'vendor_name'=>$vendor_name[$i],
     'model'=>$model[$i],
     'price' =>$price[$i], 
     'purchase_quantity'=>$quantity[$i],
     'amount'  =>$price[$i]*$quantity[$i],
     'invoice_no'=>$invoice_no[$i]
     );

   $insert = $this->db->insert('purchase',$data);
   return $insert; }
   }

But when I submit I get the following value in db

       Sl  date   Vendor name   model price quantity amount invoice
       89   2                      A     1    0            0       a

Please help. I need Multiple value insert with one form in db.

My view form look like

  <?php 
   $data = array ('name'      => 'quantity',
           'class'     =>'input-xlarge',
           'value'     => set_value('quantity')
           ); 

           ?>

           <?php echo form_input ($data); ?> 

My controller is

   public function purchase()
 { 
     if($this->Purchase_model->purchase()){

    $this->session->set_flashdata('Success', 'You are entered data  successfully');       
     redirect('home/purchase_form'); 
 }
 } 

Upvotes: 1

Views: 250

Answers (2)

Nathan
Nathan

Reputation: 12010

You should use the insert_batch function instead, it should fix your problem and it is cleaner/more efficient as it requires only one query:

class Purchase_model extends CI_Model {

  public function purchase() {

     $price = $this->input->post('price');
     $quantity = $this->input->post('quantity');
     $date = $this->input->post('date');
     $vendor_name = $this->input->post('vendor_name');
     $model = $this->input->post('model');

     $invoice_no = $this->input->post('invoice');
     $count = count($this->input->post('vendor_name'));

     $insert_data = array();

     for($i=0; $i < $count; $i++){
         $data = array(
             'date'=>$date[$i], 
             'vendor_name'=>$vendor_name[$i],
             'model'=>$model[$i],
             'price' =>$price[$i], 
             'purchase_quantity'=>$quantity[$i],
             'amount'  =>$price[$i]*$quantity[$i],
             'invoice_no'=>$invoice_no[$i]
         );
         $insert_data[] = $data;
     }
     $insert = $this->db->insert_batch('purchase', $insert_data);
     return $insert;
  }

}

Upvotes: 1

sanir ranta
sanir ranta

Reputation: 291

Try Following code

View Code

$data = array ('name'      => 'price[]',
    'class'     =>'input-xlarge',
    'value'     => set_value('price')
); 
echo form_input ($data);   

$data = array ('name'      => 'quantity[]',
    'class'     =>'input-xlarge',
    'value'     => set_value('quantity')
); 
echo form_input ($data);   

$data = array ('name'      => 'date[]',
    'class'     =>'input-xlarge',
    'value'     => set_value('date')
); 
echo form_input ($data);   

$data = array ('name'      => 'vendor_name[]',
    'class'     =>'input-xlarge',
    'value'     => set_value('vendor_name')
); 
echo form_input ($data);

$data = array ('name'      => 'model[]',
    'class'     =>'input-xlarge',
    'value'     => set_value('model')
); 
echo form_input ($data);

$data = array ('name'      => 'invoice[]',
    'class'     =>'input-xlarge',
    'value'     => set_value('invoice')
); 
echo form_input ($data); 

Model Code

class Purchase_model extends CI_Model {
  public function purchase() {

     $data_array = $this->input->post();

     $vendor_data   = $data_array['vendor_name'];

     foreach($vendor_data as $key => $value){
         $amount    =   $data_array['price'][$key] * $data_array['quantity'][$key];
         $data = array(
             'date'                 =>  $data_array['date'][$key], 
             'vendor_name'          =>  $data_array['vendor_name'][$key],
             'model'                =>  $data_array['model'][$key],
             'price'                =>  $data_array['price'][$key], 
             'purchase_quantity'    =>  $data_array['quantity'][$key],
             'amount'               =>  $amount,
             'invoice_no'           =>  $data_array['invoice'][$key]
         );
         $insert_data[] = $data;


    }
     $insert = $this->db->insert_batch('purchase', $insert_data);
     return $insert;


  }

}

Upvotes: 0

Related Questions