2011-08-19 71 views
0

也許我缺少一些簡單的東西,但我似乎無法讓我的表單驗證恰到好處。CodeIgniter - 驗證帶有字段和文件上傳的表單

我怎樣才能獲得表單驗證檢查文件校驗也沒有做一個

$this->upload->do_upload("fldImage") 

這是我目前正在覈查過程:

if ($this->form_validation->run() == FALSE) 
    { 
     if (! $this->upload->display_errors("fldImage")) 
     { 
      $error = array('error' => $this->upload->display_errors()); 
     } 
     $this->load->view('submitBlog', $error); 
    } 
    else 
    { 
     if (! $this->upload->do_upload("fldImage")) 
     { 
      $error = array('error' => $this->upload->display_errors()); 
      $this->load->view('submitBlog', $error); 
     } 
     else 
     { 
      $data = array('upload_data' => $this->upload->data()); 
      unset($blog['submit']); 
      $imagePath = "uploads/".$data['upload_data']['file_name']; 
      $blog['fldImage'] = $imagePath; 
      $blog['fldDateAdded'] = $datetime; 
      $this->db->insert('tblBlog', $blog); 
      $this->load->view('submitBlogSuccess', $data); 
     } 
    } 

但我當然不能打電話

do_upload("fldImage") 

沒有運行

do_upload() 

但如果圖像有效但其他表單值不是,我不想上傳圖像。

回答

3

首先,添加以下規則:

$this->form_validation->add_rule('userfile', 'required|callback__check_ext'); 

而下面的回調函數:

function _check_ext() 
{ 
    if (! empty($_FILES['userfile']['name'])) 
    { 

     $ext  = pathinfo($_FILES['userfile']['name'], PATHINFO_EXTENSION); 
     $allowed = array('jpg', 'png'); 

     if (! in_array(strtolower($ext), $allowed)) 
     { 
      $this->form_validation->set_message('_check_ext', 'Extension not allowed'); 
      return FALSE; 
     } 

    } 
    return TRUE; 
} 

概念從PyroCMS借來的。必要時改變。

注意:檢查MIME類型可能是一種更好的方法,請告訴我是否需要幫助。

0

嗯,我希望我的答案沒有錯。我有一個類似的問題。我想與我的網站訪問者保持靈活性。這意味着如果用戶想要上傳照片/文件,那就沒問題,它不會再次出現問題。從技術上講,我很難理清用戶是否選擇了要上傳的文件。我搜索了很多論壇和博客,並且我找到了一個我想在這裏分享的解決方案。如果我錯了,請讓我知道;

if(empty($_FILES['userfile']['name'])) 
{ 
    // Perform the Normal Uploading without the File 
} 
else 
{ 
    // Perform the uploading with the File 
} 

花了我很長時間才把它整理出來。如果你發現它不合適的方式,請讓我知道糾正我的技術。