Reputation: 49
I have multiple form field. I want to insert more than 25 row in db with insert_batch in codeigniter. like
public function purchase(){
$data = array(
array(
'date'=> $this->input->post('date'),
'vendor_name'=>$this->input->post('vendor_name'),
'model'=>$this->input->post('model'),
'price' =>$this->input->post('price'),
'purchase_quantity'=>$this->input->post('quantity'),
'amount' =>$this->input->post('price')*$this->input->post('quantity'),
'invoice_no'=>$this->input->post('invoice')
),
array(
'date'=> $this->input->post('date'),
'vendor_name'=>$this->input->post('vendor_name2'),
'model'=>$this->input->post('model2'),
'price' =>$this->input->post('price2'),
'purchase_quantity'=>$this->input->post('quantity2'),
'amount' =>$this->input->post('price2')*$this->input->post('quantity2'),
'invoice_no'=>$this->input->post('invoice')
),
array(
'date'=> $this->input->post('date'),
'vendor_name'=>$this->input->post('vendor_name3'),
'model'=>$this->input->post('model3'),
'price' =>$this->input->post('price3'),
'purchase_quantity'=>$this->input->post('quantity3'),
'amount' =>$this->input->post('price3')*$this->input->post('quantity3'),
'invoice_no'=>$this->input->post('invoice')
)
);
$insert = $this->db->insert_batch('purchase',$data);
return $insert;
}
but if I complete two field and submit it show error like
Incorrect integer value: '' for column 'purchase_quantity' at row 3
INSERT INTO `purchase` (`amount`, `date`, `invoice_no`, `model`, `price`,
`purchase_quantity`, `vendor_name`) VALUES
(4995,'18-09-2014','vvvvv','m6','999','5','mizan'),
(5000,'18-09-2014','vvvvv','ab12','1000','5','abcde'), (0,'18-09-2014','vvvvv',0,0,'','')
Filename: C:\xampp\htdocs\final\sys\database\DB_driver.php
Line Number: 330
Please help.
Upvotes: 0
Views: 1985
Reputation: 64
you can set the values as null or default value if form elements are empty like this..
'date'=>($this->input->post('date'))?$this->input->post('date'):null;
or
'date'=>($this->input->post('date'))?$this->input->post('date'):date('Y-m-d');
Or do like this if you want to ignore insert totally:
$data = array();
for($i=1;$i<=25;$i++)
{
if($i>1)
{
if($this->input->post('vendor_name'.$i) && $this->input->post('model'.$i) && $this->input->post('price'.$i) && $this->input->post('quantity'.$i))
{
$record = array(
'date'=> $this->input->post('date'),
'vendor_name'=>$this->input->post('vendor_name'.$i),
'model'=>$this->input->post('model'.$i),
'price' =>$this->input->post('price'.$i),
'purchase_quantity'=>$this->input->post('quantity'.$i),
'amount' =>$this->input->post('price'.$i)*$this->input->post('quantity'.$i),
'invoice_no'=>$this->input->post('invoice')
);
$data[]=$record;
}
}
else{
if($this->input->post('vendor_name') && $this->input->post('model') && $this->input->post('price') && $this->input->post('quantity'))
{
$record = array(
'date'=> $this->input->post('date'),
'vendor_name'=>$this->input->post('vendor_name'),
'model'=>$this->input->post('model'),
'price' =>$this->input->post('price'),
'purchase_quantity'=>$this->input->post('quantity'),
'amount' =>$this->input->post('price')*$this->input->post('quantity'),
'invoice_no'=>$this->input->post('invoice')
);
$data[]=$record;
}
}
}
Upvotes: 0
Reputation: 685
use intval before integer values..
intval($this->input->post('quantity2'))
https://ellislab.com/forums/viewthread/238144/
Upvotes: 1
Reputation: 3740
It will be better if you use variables to insert batch data.
$purchase_quantity=empty($this->input->post('quantity3'))==true?0:$this->input->post('quantity3');
And use this $purchase_quantity
in array to insert.
The code above will check if quantitiy3 have empty value (ie 0,null or false) it will replace with 0
(An integer) and save in variable that you can use in array to insert
Upvotes: 0