2017-02-03 64 views
1

在笨文檔here如何從CodeIgniter中的表單驗證回調方法返回數據?

在該節狀態的底注:

您也可以處理傳遞給你的回調錶單數據並將其返回。如果您的回調函數返回布爾值TRUE/FALSE以外的任何值,則假定該數據是您新處理的表單數據。

我有一個回調函數,驗證圖像上傳和不上傳,是這樣的:

public function upload() { 
    $this->form_validation->set_rules('imageFile', 'Image', 'callback_validate_image'); 
    // ... 
} 

然後回調函數:

public function validate_image() { 

     if (empty($_FILES['imageFile'])) { 
      $this->form_validation->set_message('validate_image', 'Please select a file'); 
      return false; 
     } 

     $config = array (
      'upload_path' => './uploads/', 
      'allowed_types' => 'jpg|jpeg|png|gif', 
      'max_size' => '5048576' 
     ); 

     $this->load->library('upload', $config); 

     if (!$this->upload->do_upload('imageFile')) { 
      $this->form_validation->set_message('validate_image', $this->upload->display_errors()); 
      return false; 
     } else { 
      $data = array('upload_data' => $this->upload->data()); 
      return $data; 
     } 

} 

我怎樣才能返回$dataupload函數,以便我可以在一個查詢中插入所有數據到數據庫中?

+0

如果我使用了驗證我只用於驗證不會上傳 –

+0

您無法直接將數據返回給該回調,但是您可以使用全局變量或類變量來訪問該數據。順便說一下,不建議在表單驗證中上傳圖像。 – puncoz

+0

那麼如何在沒有'do_upload()'函數的情況下檢查文件是否有效? –

回答

1

如果我做了你的代碼的一部分,我會做這樣的

function upload() 
{ 

    // 'required' doesn't work on file inputs so use empty() 
    if (empty($_FILES['imageFile'])) { 
     // show error message 
    } 

    if ($this->form_validation->run() == FALSE) 
    { 
      echo "Please select a file"; 
      //$this->load->view('myform'); 
    } 
    else 
    { 
     $config = array (
      'upload_path' => './uploads/', 
      'allowed_types' => 'jpg|jpeg|png|gif', 
      'max_size' => '5048576' 
     ); 

     $this->load->library('upload', $config); 

     if (!$this->upload->do_upload('imageFile')) 
     { 
      $this->form_validation->set_message('validate_image', $this->upload->display_errors()); 
      return false; 
     } 
     else { 
      $data['upload_data'] = $this->upload->data(); 
      $data['form_data'] = $this->input->post(NULL, TRUE); 
      var_dump($data); 
     } 
    } 
} 

沒有通過上傳部去了。在運行之前對其進行測試

+0

啊更好的方法!謝謝。另外,我沒有使用這一行:'$ this-> form_validation-> set_rules('imageFile','Image','required')',因爲所需的文件輸入不起作用。相反,我只是在'form_validation-> run()'之前放了一個'empty()'檢查。更新我的問題,讓人們可以看到未來。 –

+0

對我的答案做更新。所以它會更好地解釋你所說的。 –

+0

已批准..高興地幫助:) –