2013-11-26 99 views
1

我已經爲圖像上傳創建了驗證規則,如下所示。Codeigniter用於文件驗證的回調函數不起作用

$this->form_validation->set_rules('display_photo', 'Display Photo', 'callback_file_required|callback_file_size_max[1000]'); 

在控制器我已經包括回調函數如下。

 public function file_required($display_photo) { 

     if($_FILES[$display_photo]['size'] == 0) { 
      $this->form_validation->set_message('file_required', 'Upload a file.'); 
      return false; 
     } 
     return true; 
    } 

     public function file_size_max($display_photo, $max_size) { 

     if($_FILES[$display_photo]['size'] > $max_size) { 
      $this->form_validation->set_message('file_size_max', 'This file exceeds max size.'); 
      return false; 
     } 
     return true; 
     } 

只有第一條規則正在執行,而不是第二條規則。請幫我找出解決方案。

+0

單向 - 您可以在文件上傳時進行vlaidate! – Suleman

+0

@Suleman在上傳之前,我希望驗證是這樣的。 – Sanganabasu

回答

0

您應該在配置中傳遞文件大小限制,而不是在驗證規則中。 你可以粘貼執行上傳的函數或方法嗎?

+0

只需驗證未上傳圖片的圖片即可。無論如何,如果我通過論證,該功能應該正常工作。 – Sanganabasu

0

的一種方式 - 您可以在上傳文件之前與JS驗證:

<form method="post" enctype="multipart/form-data" action="upload.php"> 
<input type="file" name="file" id="file" /> 
<input type="submit" name="submit" value="Submit" /> 
</form> 

<script> 
document.forms[0].addEventListener('submit', function(evt) { 
    var file = document.getElementById('file').files[0]; 

    if(file && file.size < 10485760) { // 10 MB (this size is in bytes) 
     //Submit form   
    } else { 
     //Prevent default and display error 
     evt.preventDefault(); 
    } 
}, false); 
</script> 

Original Question is here

但是如果你想驗證在服務器端,然後服務器,直到開不知道,每當我們上傳的文件。

+0

我知道jquery驗證。我想這樣做.. – Sanganabasu

+0

服務器直到我們上傳文件才知道! – Suleman

+0

在上傳之前,我們會得到文件的大小.. – Sanganabasu

0
$this->form_validation->set_rules('display_photo', 'Display Photo', 'callback_file_required_with_validation'); 

public function file_required_with_validation($display_photo) { 

    $max_size=1000; 

    if($_FILES[$display_photo]['size'] == 0) { 
     $this->form_validation->set_message('file_required', 'Upload a file.'); 
     return false; 
    } 

    if($_FILES[$display_photo]['size'] > $max_size) { 
     $this->form_validation->set_message('file_size_max', 'This file exceeds max size.'); 
     return false; 
    }  
    return true; 
} 
0

不確定在CI中驗證表單時是否可以在單個字段上使用兩個回調。在任何情況下,您都不需要檢查文件的大小以查看文件是否已上傳。使用錯誤代碼「4」

解決方案:

  • 檢查文件是否與if($_FILES[$display_photo]['error'] !== 4) // Error code 4 means no file was uploaded. So if it's not 4 then you have a file.
  • 上傳如果你想要做的多張支票,你可以把他們都在一個單一的回調
0

很確定你需要在驗證定義中的'回調'之後加下劃線...

$this->form_validation->set_rules('display_photo', 'Display Photo', 'callback__file_required|callback__file_size_max[1000]');