2016-12-11 1 views
1

こんにちは私は複数のファイルをアップロードしますが、フォームはすべてのフィールドをアップロードする必要はありません2番目の入力フィールドはアップロードしないでください。PHP - 複数のファイルのアップロード、いくつかのフィールドをアップロードしていない場合、エラーが発生します

問題は、ユーザーが1つのファイルのみをアップロードすると、「無効なファイル」(最終のelse文)というエラーが表示されることです。 しかし、ユーザーが2つのフィールドをすべてアップロードすると、エラーは発生しません。エラーはヌルアップロードフィールドから来たと思います。だから私は空ではない最初に使用しますが、それは仕事ではありません。どうすればいいですか?あなたはあなたの最初の行に変更することができ

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

upload.phpページで

<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> 

:1または複数のファイルで

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

はこれはとのライン上

を操作できます。

echo "Invalid file" ; 
exit(); 

最初のファイルに問題がある場合はアプリケーションを終了し、2番目以降のファイルは処理しないため、これが問題になります。

私も、あなたにこのコードをお勧め:

<?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 
    } 
} 

}

を改善することができ、これは新しい創造にファイル名を確認します。

関連する問題