我正在研究一种保存和记录用户选择和发布的图像的方法。
继承我的方法。
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”
为什么不显示每个文件的名称?
答案 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);
}
您会看到$file
是array()
,其中一个键/值对是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时,正如您所做的那样,您将插入整个数组。