2011-12-18 24 views
0

我有一個腳本,用戶可以上傳多個文件(最多8個)。的HTML是由一塊PHP的產生:

$max_no_img=8; 
for($i=1; $i<=$max_no_img; $i++){ 
    <div class='photo photo$i'> 
     <div class='new_label'> 
     Foto $i: 
     </div> 
     <div class='new_input'> 
     <input type='file' name='images[]' /> 
     </div> 
    </div>"; 
} 

所以陣列images[]由8個值。但是,每次用戶提交表單時,表單都會生成一個8個數組的數組,然後在數據庫中插入8個值(不管它們是否爲空)。

因此,我想取消設置空值,將文件複製到我的文件夾,並將鏈接插入我的數據庫。但這是錯誤發生的部分。

$_FILES的數組由4個東西組成。 name,tmp_name,errorsize。我如何得到它,所以一個完整的項目(比如images[0])將從數組中取消設置,以便我可以繼續實際攜帶一個值的項目。

我想這一點,但沒有結果...

unset($_FILES['images'][0]) 

unset($_FILES['images']['name'][0]) 
unset($_FILES['images']['tmp_name'][0]) 
unset($_FILES['images']['error'][0]) 
unset($_FILES['images']['size'][0]) 

任何意見如何來取消從$ _FILES-ARRY值?

+0

嗯,'未設置($ _ FILES [」圖像'] [0])'應該工作。請發佈'var_dump($ _ FILES)' – 2011-12-18 14:38:25

回答

2

你可以不理會他們,而不是處理或註銷任何項目:

if (!empty($_FILES['images'])) { 
    for ($i = 0; $i < count($_FILES['images']['name']); $i++) { 
     if (empty($_FILES['images']['name'][$i])) { 
      // This item is empty 
      echo "Item $i references an empty field.\n"; 
      continue; 
     } 

     echo "Item $i is a valid file.\n"; 
    } 
} 
+0

謝謝!這是最完整的解決方案:-) – Michiel 2011-12-18 15:46:09

2

您實際上並不需要unset任何項目。簡單地跳過不對應於一個上傳文件的項目:

for($i=1; $i <= $max_no_img; $i++) { 
    if(empty($_FILES['images']['name'][$i])) { 
     continue; // that's all it takes 
    } 
}