2014-09-26 55 views
1

我的以下模型是用於在db中插入數組。我也提交了查看文件的例子。請幫忙用循環在codeigniter中插入批處理數據。Codeigniter中的數組插入錯誤

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

但是,當我提出我得到分貝以下值

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

請幫助。 我需要在db中使用一種形式插入多個值。

我的看法形式的樣子

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

      ?> 

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

我控制器

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

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

請出示您的控制器代碼如果可能的話.. – 2014-09-26 05:02:46

+0

公共職能購(){ \t \t \t if($ this-> Purchase_model-> purchase()){ \t \t \t \t \t $ this-> session-> set_flashdata('Success','您輸入的數據成功'); \t \t \t \t \t redirect('home/purchase_form'); \t \t \t \t \t} } – user3752230 2014-09-26 05:15:00

+0

編輯您的問題並顯示完整查看代碼它只是您顯示的單個元素。 – 2014-09-26 05:21:40

回答

1

您應該使用insert_batch功能相反,它應該解決您的問題,它是清潔/更有效,因爲它需要只有一個查詢:

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

} 
+0

問題沒有解決。我在db中得到了同樣的數字。只顯示第一個字。 – user3752230 2014-09-26 04:50:34

+0

@ user3752230然後,它看起來像'$ vendor_name [$ i]'是個問題。嘗試做'die($ vendor_name [$ i]);'在循環中查看供應商名稱變量是否包含你想要在數據庫中。 – Nathan 2014-09-26 20:40:38

+0

實際上'var_dump($ vendor_name);'而不是(在循環之外)。它會輸出數組,你將能夠看到值是否正確。 – Nathan 2014-09-26 21:01:42

0
//use text box as multiple you can try this... eg. 'name'  => 'quantity[]' 

<?php 

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

      ?> 

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

顯示同樣的錯誤。沒有改善。 – user3752230 2014-09-26 05:00:06

0

嘗試下面的代碼

查看代碼

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


    } 

}