2012-12-19 125 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"; 
}