2013-09-26 10 views
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(); 
      } 
     } 

上午我居然通過每幅圖像由foreach()循環引用['tmp_name']循環是否正確?

var_dump()回報:

字符串(38) 「IMG /事件圖像/ 9596177294458547Array」

爲什麼不顯示每個文件的名稱?

+0

你爲什麼準備新的聲明並綁定每個循環的新變量? –

回答

1

如果我深知,我覺得這個部分:

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

應該

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

爲你分配給$ tmp_name的值用foreach數組的每一個值,但你正在做的,你正在插入整個數組。

+0

我想在結尾添加當前圖像的名稱,而不是tmp目錄。 – crm

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