如何检查文件输入中是否选择了任何内容

时间:2013-12-11 10:28:51

标签: php forms file input upload

所以我有这样的表格:

<form enctype="multipart/form-data" action="profile.php" method="post">
<input type="file" name="pics"><br>
<input type="submit" name="submitpic">
</form>

在尝试识别是否存在实际选择的文件时,似乎是$ _POST ['pics']; 不起作用,或者没有价值。

if(isset($_POST['submitpic'])){ 
    if($_POST['pics']!=NULL){   
        $dir = 'id_data/';
        $pic_ext = pathinfo($_FILES['pics']['name']);
        $pic_unique_id = $userid;
        $pic_name = $pic_unique_id.".".$pic_ext['extension'];

        if(move_uploaded_file($_FILES['pics']['tmp_name'],"$dir/$pic_name")){
            echo "yes";
        }
    }
}
?>

还有另一种检查文件是否被选中的方法? 谢谢!

3 个答案:

答案 0 :(得分:0)

您可以使用

检查文件是否在POST请求中
isset($_FILES['pics'])

,否则

move_uploaded_file($_FILES['pics']['tmp_name'],"$dir/$pic_name")
移动文件时

为true,因此如果上传文件但由于某些原因未移动(例如由于目录权限),则无论如何都会返回false。

答案 1 :(得分:0)

出于测试目的,我将在EMPTY提交后显示以下代码及其输出:

<form enctype="multipart/form-data" action="" method="post">
<input type="file" name="pics"><br>
<input type="submit" name="submitpic">
</form>

<?php
var_dump($_POST);
var_dump($_FILES);
var_dump(isset($_FILES['pics']));
var_dump(empty($_FILES['pics']['name']));

array (size=1)
  'submitpic' => string 'Submit Query' (length=12)

array (size=1)
  'pics' => 
    array (size=5)
      'name' => string '' (length=0)
      'type' => string '' (length=0)
      'tmp_name' => string '' (length=0)
      'error' => int 4
      'size' => int 0

boolean true

boolean true

所以pics位于$_FILES数组中,即使它是空的,也始终检查isset()。您需要检查name是否为空。然后你可以这样做:

if(!empty($_FILES['pics']['name']))代替if($_POST['pics']!=NULL)。但我敢打赌,你还需要一些更多的验证。

答案 2 :(得分:0)

由于您要提交“文件”,因此您必须使用$_FILES检查来检查您的后端。方法如下:

if(isset($_FILE)) 
{
     //Enter your code here.
}