Проблема с загрузкой нескольких файлов

#php

#php

Вопрос:

Я новичок в PHP, и мне интересно, как я могу достичь следующего результата.

У меня есть HTML-форма для загрузки нескольких файлов (только PDF), в которой указано до 5 файлов. И для каждого файла у него есть тег select для выбора другого пользователя (извлекается из базы данных) и другой тег select для разных месяцев. В идеале, это не сложно, если пользователь выбирает файл один за другим, не пропуская ни одного файла посередине.

 <input type=file name=pdf[] />
<select name=user[]>
  <option value=a>user a</option>
  <option value=b>user b</option>
  <option value=c>user c</option>
</select>
<select name=month[]>
  <option value=jan> jan </option>
               .
               .
               . so on
</select>
  

Пример:

 File1.pdf --- UserA --- Jan
File2.pdf --- UserB --- Feb
Not choose ---
File4.pdf --- UserA --- Mar
Not choose ---
  

Когда я нажимаю submit , данные содержат здесь несколько массивов, один из $_POST , другой из $_FILES , итак, как я могу реконструировать и объединить эти массивы в новый массив и удалить те, которые пусты.

Нравится :

 Array(
[0]=> Array(user=>userA, month=>Jan, filename=>File1.pdf, type=>application/pdf, size=>1234456)
[1]=> Array(user=>userB, month=>Feb, filename=>File2.pdf, type=>application/pdf, size=>1234456)
[2]=> Array(user=>userA, month=>Mar, filename=>File4.pdf, type=>application/pdf, size=>1234456)
)
  

Заранее спасибо!

Ответ №1:

Просто дайте вашим полям лучшие имена:

result[0][user] , result[0][month] , result[0][pdf]
result[1][user] , result[1][month] , result[1][pdf]

Затем просто рекомбинируйте файлы в результат:

 $results = $_POST['result'];
foreach ($results as $i => amp;$result) {
    if (isset($_FILES['result'][$i]['pdf']) amp;amp; is_array($_FILES['result'][$i]['pdf'])) {
        $result = array_merge($result, $_FILES['result'][$i]['pdf']);
    }
}
  

Комментарии:

1. привет, спасибо за быстрый ответ. Я меняюсь как urs, однако у меня возникла проблема со 2-м аргументом, который не является массивом: (

2. @jasper Смотрите обновление. Вероятно, вам придется дополнительно настроить это в соответствии с вашими потребностями, но я надеюсь, вы поняли идею.