2011-12-18 4 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, error и size. Как я могу получить его, так что полный элемент (допустим, 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 [» images '] [0]) 'должен работать. Пожалуйста, напишите 'var_dump ($ _ FILES)' –

ответ

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

2

На самом деле вам не нужно unset любых предметов. Просто пропустить элементы, которые не соответствуют закачиваемого файла:

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