2010-01-14 6 views
1

Это мой HTML разметка:Загрузка нескольких файлов с PHP

<p><input type="file" name="file[]" id="file" /></p> 
<p><input type="file" name="file[]" id="file" /></p> 
<p><input type="file" name="file[]" id="file" /></p> 
<p><input type="file" name="file[]" id="file" /></p> 
<p><input type="file" name="file[]" id="file" /></p> 

Когда я отправить форму, форма подачи пустых файлов. Это print_r массива он посылает:

Array 
(
    [name] => Array 
     (
      [0] => thumb.jpg 
      [1] => 
      [2] => 
      [3] => 
      [4] => 
     ) 

    [type] => Array 
     (
      [0] => image/jpeg 
      [1] => 
      [2] => 
      [3] => 
      [4] => 
     ) 

    [tmp_name] => Array 
     (
      [0] => C:\xampp\tmp\phpEE16.tmp 
      [1] => 
      [2] => 
      [3] => 
      [4] => 
     ) 

    [error] => Array 
     (
      [0] => 0 
      [1] => 4 
      [2] => 4 
      [3] => 4 
      [4] => 4 
     ) 

    [size] => Array 
     (
      [0] => 5130 
      [1] => 0 
      [2] => 0 
      [3] => 0 
      [4] => 0 
     ) 

) 

Есть ли способ, чтобы остановить все эти пустые файлы отправляются? Поскольку у меня есть чувство, что это даст мне головную боль позже по сценарию. Я думал, что могу проверить код ошибки для каждого файла (4, если нет файла), а затем отключить его из массива, что вы думаете?

+1

только примечание: все 5 входов имеют одинаковый ID –

ответ

0

Один из способов сделать это - иметь только один вход для загрузки файла и кнопку +, которая вызывает функцию JavaScript, которая добавляет другой (и другой ...) вход для загрузки файла.

Я не понимаю, почему дополнительные значения массива дадут вам проблемы, хотя, просто использовать обобщенную функцию загрузки, как следующие, и вы должны быть в порядке:

function Upload($source, $destination) 
{ 
    $result = array(); 

    if (array_key_exists($source, $_FILES) === true) 
    { 
     $destination = str_replace('\\', '/', realpath($destination)); 

     if (is_array($_FILES[$source]['error']) === true) 
     { 
      foreach ($_FILES[$source]['error'] as $key => $value) 
      { 
       if ($value == UPLOAD_ERR_OK) 
       { 
        if (move_uploaded_file($_FILES[$source]['tmp_name'][$key], $destination . basename($_FILES[$source]['name'][$key])) === true) 
        { 
         $result[] = $destination . basename($_FILES[$source]['name'][$key]); 
        } 
       } 
      } 
     } 

     else 
     { 
      if (move_uploaded_file($_FILES[$source]['tmp_name'], $destination . basename($_FILES[$source]['name'])) === true) 
      { 
       $result[] = $destination . basename($_FILES[$source]['name']); 
      } 
     } 
    } 

    return $result; 
} 
+0

Незначительный nitpick, но проверки '=== true' излишне подробные. Ни одна из функций, о которых идет речь, не может возвращать все, что могло бы оцениваться как истинное, кроме самого истинного. Вы также можете проверить, что 1 + 1 === 2 –

+0

Эта рекомендация основана на Javascript, который не может быть включен в каждом браузере. – Nilpo

+0

@Nilpo: он не полагается на Javascript, он только предполагает, что с помощью Javascript можно было бы избежать сотен '' показываться по умолчанию второй абзац и все ниже все еще применяются в любом месте. –

1

поцелуя. Просто проверьте коды ошибок и сделайте это.
Нет простого способа обойти это, поскольку пользователи (они глупы, вы знаете) попытаются загрузить, несколько раз только в последней позиции или могут находиться в первой и третьей позиции ... вы получаете мой дрейф.
B.T.W Есть много готовых классов, которые могут справиться с этим для вас.

0

Возможно, вы можете проверить значения полей (input.value != "") перед отправкой формы и удалить их из DOM, если они пусты.

Или, на стороне сервера, проверьте код ошибки на UPLOAD_ERR_NO_FILE постоянный.

0

Вы можете начать с ввода только одного файла, жестко закодированного в html, а затем разрешить пользователям нажимать кнопку, которая вызывает функцию javascript, чтобы добавить дополнительный вход для каждого дополнительного файла, который они хотят загрузить. Таким образом, не должно быть ненужных входных файлов. Аналогично, вы можете использовать javascript для проверки пустых входов при отправке формы и их удаления.

Смежные вопросы