PHP 遍历具有相同名称的输入字段,上传所有

PHP loop through input fields with same name, upload all

我有多个同名的输入字段。它们看起来像:

<input type="hidden" class="image-hidden" name="image-to-upload[]" />
<input type="hidden" class="image-hidden" name="image-to-upload[]" />
<input type="hidden" class="image-hidden" name="image-to-upload[]" />
<input type="hidden" class="image-hidden" name="image-to-upload[]" />
...
...

我正在使用此代码上传:

<?php
    if(isset($_POST['new-blogpost'])) {
        $img = $_POST['image-to-upload'][0];
        $img = str_replace('data:image/jpeg;base64,', '', $img);
        $img = str_replace(' ', '+', $img);
        $data = base64_decode($img);
        $file = 'image.jpg';
        $success = file_put_contents($file, $data);
    };
?>

问题是,此代码只会上传第一个输入字段图片。

我必须如何重写我的代码才能上传所有输入字段? (我知道在那种情况下我必须给我的文件指定唯一的名称,但这不是我的问题。我想知道如何告诉 PHP 它必须遍历所有输入字段并进行上传。

提前致谢!

要迭代所有文件,请使用 foreach 循环

foreach($_FILES['image-to-upload']['tmp_name'] as $key => $tmp_name)
    {

      //Code

    }

查看此 link 以获得更多理解:

PHP Multiple File Array

使用 foreach 循环:

$list = ['apple', 'banana', 'cherry'];

foreach ($list as $value) {
    if ($value == 'banana') {
        continue;
    }
    echo "I love to eat {$value} pie.".PHP_EOL;
}

在您的示例中 - 您的数组名称是 $_POST['image-to-upload'] 因此您可以遍历它:

foreach($_POST['image-to-upload'] as $img) {
    $img = str_replace('data:image/jpeg;base64,', '', $img);
    $img = str_replace(' ', '+', $img);
    $data = base64_decode($img);
    // $file = 'image.jpg'; // here you need to create the unique filename
    $success = file_put_contents($file, $data);
}

声明一个数组并将其等同于您的 post 数据,例如 $arr =new array(); $arr = $_POST["img[]"]; 并且使用 for 循环您可以遍历您的数组