尝试循环浏览图像以单独保存和记录每个图像

时间:2013-09-26 13:49:18

标签: php image-processing pdo foreach

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

继承我的方法。

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()返回:

  

string(38)“img / event-images / 9596177294458547Array”

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

2 个答案:

答案 0 :(得分: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);
}

您会看到$filearray(),其中一个键/值对是tmp_name => tmp_name_assigned_by_server,另一个将是name => original_file_name

在这里查看示例和参考 http://php.net/manual/en/features.file-upload.multiple.php

答案 1 :(得分: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时,正如您所做的那样,您将插入整个数组。