【问题标题】:How to check if anything was chosen in a File Input如何检查文件输入中是否选择了任何内容
【发布时间】:2013-12-29 06:41:12
【问题描述】:

所以我有这个表格:

<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";
        }
    }
}
?>

还有其他方法可以检查文件是否被选中? 谢谢!

【问题讨论】:

  • 它在文件数组中,下面你正在使用它...你的语法错误,你在 if 语句中缺少)

标签: php forms file input upload


【解决方案1】:

您可以检查文件是否在 POST 请求中

isset($_FILES['pics'])

否则

move_uploaded_file($_FILES['pics']['tmp_name'],"$dir/$pic_name")

当文件被移动时为真,所以如果文件被上传但由于某种原因没有移动(例如由于目录权限),那么它无论如何都会返回假。

【讨论】:

  • 是的,如果您声明名称为“pics”的输入字段,则如果文件已上传,则 isset($_FILES['pics']) 将返回 true。这里有一段代码:&lt;?php echo "Uploaded:".isset($_FILES['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"; } } } ?&gt; + 你的 HTML 内容
  • isset($_FILES['pics']) 将返回 true,即使文件名为空
【解决方案2】:

出于测试目的,我将显示以下代码,并在 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)。但我敢打赌,您还需要更多验证。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 根据我对PHP的理解,只有设置了$_FILE属性,条件才会执行。如果我在这里错了,请纠正我。
    • 这里的问题是提交空值的表单后,数组 $_FILE 将存在,pics 也将存在其中。更重要的是,$_FILE[] 的行为会将键设置为 $_FILE['pics],如 name 等,无论是否没有发布文件名
    • 你可以看看我的回答。我已经解释了转储发布的值,这个帖子/文件表单的行为。 isset($_FILES)isset($_FILE['pics'] 返回 true,提交为空
    • 明白。下次我在 PHP 中使用 $_FILE 时,我会确保遵循这些建议 :)
    猜你喜欢
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    • 2013-03-17
    • 2017-04-04
    • 2020-02-24
    • 1970-01-01
    相关资源
    最近更新 更多