2015-02-21 6 views
0

в моей форме Я пытаюсь загрузить несколько или один файл, используя php. Так что мой HTML таблица выглядит следующим образом:php upload file issue using array

<tr> 
<td width="142"><b>Docs</b> 
<td width="142"><input type="file" name="files[]" id="project_docs1" class="docfile" /></td> 
<td width="142"><input type="file" name="files[]" id="project_docs2" class="docfile" /></td> 
<td width="142"><input type="file" name="files[]" id="project_docs3" class="docfile" /></td> 
</td> 

Теперь, когда я загрузить только один файл, который он показывает мне сообщение об ошибке, как: неверный формат, но он должен быть принять один файл. не нужно загружать все 3 файла. Можете ли вы рассказать мне, почему оно показывает это сообщение об ошибке: Неверный формат? Если вы загружаете все 3 файла, тогда он работает нормально.

и когда я нажимаю кнопку загрузки без загрузки файла, он показывает мне значение 1 для переменной $noOfUpload. Зачем ?

$valid_formats = array("jpg", "png", "gif", "txt", "bmp"); 
$max_file_size = 1024*100; //100 kb 
$path = "project_docs"; // Upload directory 
$error = array(); // load error message 
$files_name = array(); // get uploaded file name 

foreach ($_FILES['files']['name'] as $key => $name) { 

    $size = $_FILES['files']['size'][$key]. "<br>"; 
    $noOfUpload = count($name); 

    if($noOfUpload <= 0){ 
     $error[] = "Upload your document/s<br>"; 
    }elseif(!in_array(pathinfo($name, PATHINFO_EXTENSION), $valid_formats)){ 
     $error[] = "invalid file formate : $name<br>"; 

    } 

    //$name = md5(uniqid()) . '-' . htmlspecialchars_decode($name); 
    $files_name[] = "$name"; 

} 

if(!empty($error)){ 
    foreach ($error as $e) { 
     echo "<div class='error'>$e</div>"; 
    } 
}else{ 
    foreach ($files_name as $fn) { 
     echo "$fn<br>"; 
    }  
} 

Вы помогаете более ценить. :)

ответ

1

Попробуйте

if (isset($_FILES)) 
    { 
     $valid_formats = array("jpg", "png", "gif", "txt", "bmp"); 
     for ($i = 0; $i < count($_FILES['files']['name']); $i++) 
     { 
      if (in_array(pathinfo($FILES['files']['name'][$i], PATHINFO_EXTENSION), $valid_formats)) 
      { 
      $tmp_path = $_FILES['files']['tmp_name'][$i]; 
      if ($tmp_path != "") 
      { 
       if (move_uploaded_file($tmp_path, $new_path)) 
       { 
        //Handle other code here 
       } 
       else 
       { 
        $error[] = ""; //your error handling 
       } 
      } 
      else 
      { 
       $error[] = ""; //your error handling 
      } 
     } 
     else 
     { 
      $error[] = "invalid file formate : $name<br>"; 
     } 
    } 
} 
+0

Хорошо, я пытаюсь с этим. – creativeartbd

+0

@creativeartbd, пожалуйста, проверьте изменения '$ _FILES ['files'] как $ file' –

+0

@creativeartbd, так как вы используете несколько загрузок, вы получите другой тип массива, мой приведенный выше код будет работать для' '..., используя это, вы можете выбрать несколько файлов в одном селекторе файлов с помощью' ctrl key' .. и использовать мой приведенный выше код. –

0

Ваш код запускается для целого массива либо пустым, либо нет. Во-первых, подсчитайте свой массив, а затем запустите свой код до этого числа.

+0

, если он оленья кожа выбора файла, чем также счетчик массива будет 3, он должен проверить 'name' или другие переменные файла установлены или нет .. –

+0

, если он не выбирает файл, чем счетчик массива будет 0. как $ array_count = $ _FILES [ 'файлы'] [$ я] [ 'имя']; count (array_filter ($ array_count)); Здесь $ i - общее количество файлов массива – Sonia

+0

попробуйте и проверьте :): P –

0
<tr> 
    <td width="142"><b>Docs</b> 
    <td width="142"><input type="file" name="files[]" id="project_docs1" class="docfile" /></td> 
    </tr> 

PHP код:

$valid_formats = array("jpg", "png", "gif", "txt", "bmp"); 
    $max_file_size = 1024*100; //100 kb 
    $path = "project_docs"; // Upload directory 
    $error = array(); // load error message 
    $files_name = array(); // get uploaded file name 

    foreach ($_FILES['files']['name'] as $key => $name) { 

    $size = $_FILES['files']['size'][$key]. "<br>"; 
    $noOfUpload = count($name); 

    if($noOfUpload <= 0){ 
     $error[] = "Upload your document/s<br>"; 
    }elseif(!in_array(pathinfo($name, PATHINFO_EXTENSION), $valid_formats)){ 
     $error[] = "invalid file format : $name<br>"; 

    } 

    //$name = md5(uniqid()) . '-' . htmlspecialchars_decode($name); 
    $files_name[] = "$name"; 

} 

if(!empty($error)){ 
    foreach ($error as $e) { 
     echo "<div class='error'>$e</div>"; 
    } 
}else{ 
    foreach ($files_name as $fn) { 
     echo "$fn<br>"; 
    }  
}