【问题标题】:How to loop through HTML5 multiple file upload?如何循环通过 HTML5 多个文件上传?
【发布时间】:2013-01-22 22:12:11
【问题描述】:

我使用下面的表格将多张图片上传到我的服务器。

<form name="addimageForm" id="addimageForm" method="post" action="" enctype="multipart/form-data">              
    Gallery Image: 
    <input name="image_name[]" type="file" id="image_name" multiple="true">
    <input type="submit" name="addCatImage"/>
</form>

但我很困惑我应该如何循环遍历它,以便可以在我的数据库中插入多个图像。我使用了下面的代码,当我运行它时,即使我选择了一个图像,我的表中也会插入 4 行。我认为它正在插入所有数组字段(名称、大小、tmp_name)。我该如何解决这个问题?

foreach ($_FILES[image_name] as $file) {
    $access->uploadSubCatImages();
}

【问题讨论】:

    标签: php html


    【解决方案1】:

    PHP 使属性本身成为数组。是的,我不知道是谁决定的。

    // PHP does this:
    $_FILES['image_name']['name'] = array('file1', 'file2', 'file'3);
    $_FILES['image_name']['type'] = array('...', ...);
    

    http://www.php.net/manual/en/features.file-upload.multiple.php

    【讨论】:

      【解决方案2】:

      $_FILES 是多维的。使用您使用的语法,文件名可以在

      中访问
      $_FILES['image_name']['name'][0] # for the first one
      $_FILES['image_name']['name'][1] # for the second one
      

      等等。 这是一个链接供参考Uploading Multiple Files

      【讨论】:

        【解决方案3】:

        首先,$_FILES 数组的索引是一个字符串。虽然 PHP 会“吃掉”它并抛出一个 E_NOTICE,但你不应该这样做。请改用'image_name'。 (注意引号)

        此外,数组结构可能与您预期的不同。例如,以下内容将通过 filen ames 循环:

        foreach ($_FILES['image_name']['name'] as $filename) {
            // do work here
        }
        

        请参阅$_FILES 上的文档,尤其是this 文档页面。

        【讨论】:

        • 仅供参考,未加引号的标识符被 PHP 解释为字符串,带有 E_NOTICE。
        • @Rygu 更具体地说,它们被认为是未定义的常量,PHP 通过将常量名称解释为其值来处理错误。这可能会在未来的版本中发生变化,因此您应该不要依赖它。
        • @AgentConundrum 感谢您的准确解释。确实,不应该依赖它。
        猜你喜欢
        • 2012-11-19
        • 1970-01-01
        • 2012-12-30
        • 2021-11-02
        • 1970-01-01
        • 2016-04-01
        • 2018-11-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多