2012-12-19 102 views
11

我有一個名爲image的文件字段,但這個字段不是必需的。
當用戶沒有在表單中選擇任何文件時,​​3210總是返回一個錯誤。
如何在我的控制器中執行上載操作之前檢查用戶是否選擇了一個文件?如何檢查codeigniter中的文件字段是否爲空?

+0

只是刪除了'required'規則,如果你已經在驗證規則 –

+0

宣佈它,我沒有要求對這一領域的驗證。 – squiter

+0

然後,當用戶不選擇任何文件時,您不應該得到任何錯誤..完全錯誤是什麼? –

回答

32

請使用空()

if (empty($_FILES['userfile']['name'])) { 
} 
+0

我無法從codeigniter控制器訪問$ _FILE。 – squiter

+8

這是$ _FILES不是$ _FILE –

+0

這是$ _FILES(複數),爲什麼不呢?你的表單被提交給控制器中的一個函數,這意味着所有的super_globals(即$ _POST和$ _FILES)都可以在函數 – Matanya

0

使用empty()空函數不檢查文件中的字段爲空或不

if (! empty($_FILES)) {...} 


if(!empty($_FILES['myFileField'])) { 
    // file field is not empty.. 
} else { 
    // no file uploaded.. 
} 
+0

我在哪裏使用空()?我無法訪問字段的$ _FILE或$ this->輸入。 – squiter

+0

檢查更新的答案 – Ghostman

+0

我無法訪問Codeigniter控制器中的$ _FILE。 – squiter

1

嘗試檢查文件中使用is_uploaded_file()是有效的。例如:

if(is_uploaded_file($_FILES['userfile']['tmp_name'])) 
{ 
    do_upload(); 
} 
+0

我無法從codeigniter控制器訪問$ _FILE。 – squiter

4

在你的控制器,在接收到提交的表單功能:

if (isset($_FILES['image']['name']) && !empty($_FILES['image']['name'])) { 
    // do_upload 

} 
+2

'isset'是多餘的。從[docs](http://php.net/manual/en/function.empty.php):'empty()實質上就是!isset($ var)|| $ var == false' –

0

由於文件上傳錯誤「無文件選擇「是4號,正確的做法是:

if ($_FILES['my_image_field_name']['error'] !== 4){ 
    if ($this->upload->do_upload('my_image_field_name')) { ... 

當通過名稱或tmp_name進行檢查時,可能還有其他原因導致這些字段未填充,您可能會錯過這些字段。

1

這裏充滿腳本來檢查文件是否字段爲空或不在PHP

<!DOCTYPE html> 
<html> 
<body> 

<form action="#" method="post" enctype="multipart/form-data"> 
    Select image to upload: 
    <input name="my_files[]" type="file" multiple="multiple" /> 
    <input type="submit" value="Upload Image" name="submit"> 
</form> 


<?php 

if (isset($_FILES['my_files'])) 
    { 
    $myFile = $_FILES['my_files']; 
    $fileCount = count($myFile["name"]); 


     for ($i = 0; $i <$fileCount; $i++) 
     { 
      $error = $myFile["error"][$i]; 

      if ($error == '4') // error 4 is for "no file selected" 
      { 
       echo "no file selected"; 
      } 
      else 
      { 

       $name = $myFile["name"][$i]; 
       echo $name; 
       echo "<br>"; 
       $temporary_file = $myFile["tmp_name"][$i]; 
       echo $temporary_file; 
       echo "<br>"; 
       $type = $myFile["type"][$i]; 
       echo $type; 
       echo "<br>"; 
       $size = $myFile["size"][$i]; 
       echo $size; 
       echo "<br>"; 



       $target_path = "uploads/$name"; //first make a folder named "uploads" where you will upload files 


       if(move_uploaded_file($temporary_file,$target_path)) 
        { 
        echo " uploaded"; 
        echo "<br>"; 
        echo "<br>"; 
        } 
        else 
        { 
        echo "no upload "; 
        } 




       } 
     } 
} 
     ?> 


</body> 
</html> 

但要警惕。用戶可以上傳任何類型的文件,也可以通過上傳惡意或php文件來破解您的服務器或系統。在這個腳本中應該有一些驗證。

參考http://www.techzigzag.com/how-to-check-that-user-has-upload-any-file-or-not-in-php/

希望它會幫助你。

1

只需使用本地php代碼來檢查文件上傳。

if(!file_exists($_FILES['myfile']['tmp_name']) || !is_uploaded_file($_FILES['myfile']['tmp_name'])) { 
echo 'No upload'; 
} 
0
if(!empty($_FILES[$file_name]['name'])){ 
    // TODO your logic 

}else{ 
    echo "empty"; 
}