user3752230
user3752230

Reputation: 49

empty field show error for insert batch in codeigniter

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

Answers (3)

Ratan K
Ratan K

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

Akhil Clement
Akhil Clement

Reputation: 685

use intval before integer values..

intval($this->input->post('quantity2'))

https://ellislab.com/forums/viewthread/238144/

Upvotes: 1

Ravikumar Sharma
Ravikumar Sharma

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

Related Questions