0

我正在研究一种保存和记录用户选择和发布的图像的方法。

这是我的方法。

public function setEventImages($event_id){
            foreach($_FILES['event-images']['tmp_name'] as $tmp_name){ 
                var_dump($imgName = $this->imgPath . $this->random_name . $_FILES['event-images']['name']);
                move_uploaded_file($tmp_name, $imgName);
                $stmt = $this->dbh->prepare("INSERT INTO table_name (event_image_name, event_id) VALUES (?,?)");
                $stmt->bindParam(1, $imgName, PARAM_STR);
                $stmt->bindValue(2, $event_id, PARAM_INT);
                $stmt->execute();
            }
        }

我实际上是否通过在循环中引用正确地循环了每个['tmp_name']图像foreach()

var_dump()回报:

字符串(38)“img/事件图像/9596177294458547Array”

为什么不显示每个文件的名称?

4

2 回答 2

2

我实际上是通过在 foreach() 循环中引用 ['tmp_name'] 来正确循环遍历每个图像吗?

您的问题的答案是否定的

假设您的表单中的文件输入为

<input type="file" name="event-images[]" />
<input type="file" name="event-images[]" />
<input type="file" name="event-images[]" />

然后在提交表单后,PHP 脚本将收到一个array() $_FILES,如果您var_dump()可以看到它包含另一个array() $_FILES['event-image']

因此,如果你循环$_FILES['event-images']

foreach($_FILES['event-images'] as $file)
{
    var_dump($file);
}

你会看到它$file是一个array(),它的一个键/值对是tmp_name => tmp_name_assigned_by_server另一个name => original_file_name

在此处查看示例并参考 http://php.net/manual/en/features.file-upload.multiple.php

于 2013-09-26T14:09:51.927 回答
1

如果我理解得很好,我认为这部分:

var_dump($imgName = $this->imgPath . $this->random_name . $_FILES['event-images']['name']);

应该

 var_dump($imgName = $this->imgPath . $this->random_name . $tmp_name);

当您使用 foreach 将数组的每个值分配给 $tmp_name 时,但正如您所做的那样,您正在插入整个数组。

于 2013-09-26T13:55:38.260 回答