【问题标题】:Upload multiple images, PHP上传多张图片,PHP
【发布时间】:2012-03-19 14:51:43
【问题描述】:

我需要修改一张图片上传表单,以便我可以上传多张图片(确切地说是 6 张)。我尝试添加另一个输入并按照其他人的建议更改名称值,但它仍然显示与第一个输入复制的相同图像。我知道这可能很简单,但我不是 PHP 开发人员,所以我一直无法找到解决方案。

上传图片的代码如下:

if(isset($_FILES['image']) && $_FILES['image']['tmp_name'] != '') {
        $tempext = explode('.', $_FILES['image']['name']);
        $tempext = strtolower($tempext[count($tempext) - 1]);
        switch($tempext) {
            case 'jpg':
            case 'jpeg':
                $ext = '.jpg';
                break;
            default:
                $ext = false;
        }

        if($ext != false && move_uploaded_file($_FILES['image']['tmp_name'], $_SERVER['DOCUMENT_ROOT'] . '/img/profiles/' . $id . $ext)) {
            $imagesuccess = chmod($_SERVER['DOCUMENT_ROOT'] . '/img/profiles/' . $id . $ext, 0644) ? 'yes' : 'no';
        } else {
            $imagesuccess = 'no';
        }
    }

对于输入:

<div class="control-container<?php if((isset($_FILES['image']) && !empty($_FILES['image']['name']))) echo ' error'; ?>">
            <label for="image">Large Image</label>
            <div class="multifield">
                <?php 
                if(file_exists($_SERVER['DOCUMENT_ROOT'] . '/img/profiles/' . $id . '.jpg')) {
                    echo '<img src="/img/profiles/' . $id . '.jpg?' . rand() . '" width="310px" />';
                }
                ?>
                <input type="file" name="image" id="image" />
            </div>
</div>

任何帮助将不胜感激。

谢谢

【问题讨论】:

    标签: php input


    【解决方案1】:

    您需要有多个输入字段S:

    <input type="file" name="image1" />
    <input type="file" name="image2" />
    etc...
    

    并通过以下方式访问每个单独的文件:

    $_FILES['image1'][...]
    $_FILES['image2'][...]
    etc...
    

    或者您可以使用 PHP 特定的数组表示法快捷方式:

    <input type="file" name="image[]" />
    <input type="file" name="image[]" />
    

    $_FILES['image']['tmp_name'][0];
    $_FILES['image']['tmp_name'][1];
    etc...
    

    请注意,当使用数组表示法时,PHP 将 files 数组中的每个单独的数据点都设为自己的数组。不是将文件的数据集中在一个数组中,而是将每个单独的位分布在多个数组中。

    【讨论】:

    • 我已经尝试了这两种解决方案,但表单仍然只将一张图片发送到数据库,这是使用最后一个输入字段上传的图片。
    • var_dump($_FILES) 显示什么?去组织你的代码。
    • 好的,我有点搞砸了,现在它看起来像是出现在数据库中了。它会在 id 的末尾添加 1,即使我已将 _02 添加到输入名称和 url。不过,它似乎仍然不想将图像拉到网站上。
    • 您需要更好的错误处理。至少你应该有类似if ($_FILES['image1']['error'] !== UPLOAD_ERR_OK) { die("Upload failed with code " . $_FILES['image1']['error']); } 的东西。永远不要假设上传成功。
    • 我想通了。在我添加的 url 中。 '_02' 。在 id 之后,但它正在寻找 . '1' 。我已经调整了其他一切,一切似乎都运行良好。非常感谢您的帮助。
    【解决方案2】:

    如果您的表单中有 6 个文件输入,则 $_FILES 应该在其中包含一个数组。使用处理文件中的print_r($_FILES) 进行检查。

    【讨论】:

      【解决方案3】:

      如果您需要上传更多该文件,只需更改 name 元素。例如,您可以使用 JavaScript 添加其他输入字段。每个元素都有一个name="images[]",提交后你可以看到var_dump( $_FILES )得到了什么。

      【讨论】:

        【解决方案4】:

        上传多张图片的基本sn-p:

        <html>
        <?php
        define("UPLOAD_DIR", "/path/to/uploads/");
        
        for ($i = 0; $i < count($_FILES["file"]["tmp_name"]); $i++) {
          if (is_uploaded_file($_FILES["file"]["tmp_name"][$i])) {
              move_uploaded_file($_FILES["file"]["tmp_name"][$i], UPLOAD_DIR . $_FILES["file"]["name"][$i]);
          }
        }
        ?>
        <body>
          <form method="post" enctype="multipart/form-data">
            <input name="file[]" type="file" /><br />
            <input name="file[]" type="file" /><br />
            <input name="file[]" type="file" /><br />
            <input type="submit" />
          </form>
        </body>
        </html>
        

        【讨论】:

          【解决方案5】:

          @Ryan 我认为你的问题可能在 html 部分,为什么你不使用单个输入它会做你想做的事情,例如

          <form method="post" enctype="multipart/form-data">
              <input name="file[]" type="file" multiple="true"><br />
              <input type="submit" />
            </form>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-04-05
            • 1970-01-01
            • 2011-09-18
            • 2021-12-01
            • 1970-01-01
            • 1970-01-01
            • 2015-01-31
            • 1970-01-01
            相关资源
            最近更新 更多