Reputation: 49
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
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
Reputation: 291
Try Following 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);
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