2016-12-11 4 views
1

Здравствуйте, я делаю PHP Загружаю несколько файлов, но моя форма не требует загрузки всего поля (требуется как минимум одна загрузка поля), поэтому пользователь может не загружать второе поле ввода.PHP - многократная загрузка файла, если не загружается какое-либо поле, он получит ошибку

Проблема в том, что если пользователь загружает только 1 файл, пользователь получит сообщение об ошибке «Недопустимый файл» (окончательная инструкция else). Но если пользователь загружает все 2 поля, у него нет ошибки, я думаю, ошибка исходит из поля нулевой загрузки. Поэтому я сначала использую, если не пуст, но это не работает. Как мне это сделать?

<form action="upload.php" method="post" enctype="multipart/form-data">   
      Image 1 : 
       <input type="file" name="images[]" /> 
       <br> 
      image 2 : 
       <input type="file" name="images[]" /> <br> 

       <input type="submit" value="Upload" /> 
</form> 

в upload.php странице

if(!empty($_FILES)) 
{ 
     $count = count($_FILES["images"]["name"]); 

    for($i=1; $i <= $count; $i++) 
    { 
     if ((($_FILES["images"]["type"][$i-1] == "image/gif") 
      || ($_FILES["images"]["type"][$i-1] == "image/jpeg") 
      || ($_FILES["images"]["type"][$i-1] == "image/png")) 
      && ($_FILES["images"]["size"][$i-1] < 2000000)) //2 MB 
     { 

      if ($_FILES["images"]["error"][$i-1] > 0) 
      { 
       echo "File Error : " . $_FILES["images"]["error"][$i] . "<br />"; 
      } 
      else 
      { 
       if (file_exists("path/to/".$_FILES["images"]["name"][$i-1])) 
       { 
        echo "<b>".$_FILES["images"]["name"][$i-1] . " already exists. </b>"; 
       } 
       else 
       { 
        $newname = date('Y-m-d')."_".$i.".jpg"; 
        move_uploaded_file($_FILES["images"]["tmp_name"][$i-1] , "path/to/".$newname); 

       } 
       } 
      } 
       else 
       { 
        echo "Invalid file" ; 
        exit(); 
       } 
      } 
     } 

ответ

2

Вы можете изменить свою первую линию:

if(isset($_FILES["images"]["name"][0])) { 

С одним или несколькими файлами это может работать

на линии с:

echo "Invalid file" ; 
exit(); 

это может быть проблемой, потому что, если у первого файла есть проблема, вы выходите из приложения, а не обрабатываете второй или другие.

я предлагаю вам этот код, тоже:

<?php 
if (isset($_FILES["images"]["name"][0])) { 
$path_upload = 'path/upload/'; 
$count = count($_FILES["images"]["name"]); 
$allowed_types = array("image/gif", "image/jpeg", "image/png"); 
$nl = PHP_EOL.'<br>'; // Linux: \n<br> Window: \r\n<br> 

for($i=0; $i < $count; $i++) 
{ 
    $file_type = $_FILES["images"]['type'][$i]; 
    $file_name = $_FILES["images"]['name'][$i]; 
    $file_size = $_FILES["images"]['size'][$i]; 
    $file_error = $_FILES["images"]['error'][$i]; 
    $file_tmp = $_FILES["images"]['tmp_name'][$i]; 

    if (in_array($file_type, $allowed_types) && $file_size < 2000000) { 

     if ($file_error > 0) { 

      echo 'Upload file:'.$file_name.' error: '.$file_error.$nl; 

     } else { 

      $path_new_upload = $path_upload.$file_name; 

      // verify while filename exists 
      while (file_exists($path_new_upload)) { 

       $ext = explode('.', $file_name); // explode dots on filename 
       $ext = end($ext); // get last item of array 
       $newname = date('Y-m-d_').$i.'.'.$ext; 

       $path_new_upload = $path_upload.$newname; 

      } 

      move_uploaded_file($file_tmp, $path_new_upload); 

     } 


    } else { 

     echo 'Invalid file type to: '.$file_name.$nl; 
     // continue the code 
    } 
} 

}

Может быть лучше, это проверить имя файла для создания нового.

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

  • Нет связанных вопросов^_^