2016-10-03 154 views
0

我有一個簡單的腳本,可以上傳我的服務器上的文件並將詳細信息插入到數據庫中。多圖片上傳問題

有了下面的代碼我得到兩個錯誤..

  1. 我想只允許JPG格式。 gif和.png格式但不起作用..所有類型的格式都上傳到服務器上。

  2. 將腳本導入數字(1,2,3 ...)放入Mysql中,如果上傳字段爲空的話。

我嘗試了好幾個小時來解決這些問題,但我不知道什麼是錯..

謝謝。

<?php 

     include_once('connect.php'); 

     if(isset($_FILES['files'])){ 
      $errors = array(); 
      foreach($_FILES['files']['tmp_name'] as $key => $tmp_name){ 
       $file_name = $key.$_FILES['files']['name'][$key]; 
       $file_size = $_FILES['files']['size'][$key]; 
       $file_type = $_FILES['files']['type'][$key]; 

       if($file_type == "image/gif"){ 
        $sExt = ".gif"; 
       } elseif($file_type == "image/jpeg" || $file_type == "image/pjpeg"){ 
        $sExt = ".jpg"; 
       } elseif($file_type == "image/png" || $file_type == "image/x-png"){ 
        $sExt = ".png"; 
       } 
       if (!in_array($sExt, array('.gif','.jpg','.png'))) { 
        $errors[] = "Image types alowed are (.gif, .jpg, .png) only!"; 
       } 
       $file_tmp = $_FILES['files']['tmp_name'][$key]; 
       $file_type = $_FILES['files']['type'][$key]; 
       if($file_size > 2097152){ 
        $errors[]='File size must be less than 2 MB'; 
       }  
       $query = "INSERT into offers_pics (`offer_id`,`pic_name`,`pic_type`) VALUES ('$user_id','$file_name','$file_type'); "; 
       $result = mysqli_query($link,$query); 

       $desired_dir = "user_data"; 
       if(empty($errors) == true){ 
        if(is_dir($desired_dir) == false){ 
         mkdir("$desired_dir", 0700);  // Create directory if it does not exist 
        } 
        if(is_dir("$desired_dir/".$file_name) == false){ 
         move_uploaded_file($file_tmp,"$desired_dir/".$file_name); 
        }else{         // rename the file if another one exist 
         $new_dir = "$desired_dir/".$file_name.time(); 
         rename($file_tmp,$new_dir) ;    
        } 
       }else{ 
         print_r($errors); 
       } 
      } 
      if(empty($error)){ 
       echo "Success"; 
      } 
     } 
     ?> 


    <form action="" method="POST" enctype="multipart/form-data"> 
     <input type="file" name="files[]"> <br/> 
     <input type="file" name="files[]"> <br/> 
     <input type="file" name="files[]"> <br/> 
     <input type="file" name="files[]"> <br/> 
     <input type="file" name="files[]" > <br/><br/> 
     <input type="submit"/> 
    </form> 

    enter code here 

回答

1

佛的第一個錯誤,錯誤數組是foreah外部,你沒有清除每個文件的錯誤,並且要插入的查詢位於如果檢查錯誤始終執行的位置之外

對於第二個錯誤是相同的,執行查詢時總是必須檢查文件是否已上載。

<?php 

    include_once('connect.php'); 

    if(isset($_FILES['files'])){ 
     $filesErrors = 0; 
     foreach($_FILES['files']['tmp_name'] as $key => $tmp_name){ 
      // MOved errors inside the foreach to clear it each loop 
      $errors = array(); 

      // Check file is uploaded 
      if ($_FILES['files']['error'][$key] == UPLOAD_ERR_NO_FILE){ 
       // Continue with the next file 
       continue; 
      } 

      $file_name = $key.$_FILES['files']['name'][$key]; 
      $file_size = $_FILES['files']['size'][$key]; 
      $file_type = $_FILES['files']['type'][$key]; 

      if($file_type == "image/gif"){ 
       $sExt = ".gif"; 
      } elseif($file_type == "image/jpeg" || $file_type == "image/pjpeg"){ 
       $sExt = ".jpg"; 
      } elseif($file_type == "image/png" || $file_type == "image/x-png"){ 
       $sExt = ".png"; 
      } 
      if (!in_array($sExt, array('.gif','.jpg','.png'))) { 
       $errors[] = "Image types alowed are (.gif, .jpg, .png) only!"; 
      } 

      $file_tmp = $_FILES['files']['tmp_name'][$key]; 
      $file_type = $_FILES['files']['type'][$key]; 
      if($file_size > 2097152){ 
       $errors[]='File size must be less than 2 MB'; 
      }  


      if(empty($errors) == true){ 
       $desired_dir = "user_data"; 
       // Execute query inside the errors check 
       $query = "INSERT into offers_pics (`offer_id`,`pic_name`,`pic_type`) VALUES ('$user_id','$file_name','$file_type'); "; 
       $result = mysqli_query($link,$query); 

       if(is_dir($desired_dir) == false){ 
        mkdir("$desired_dir", 0700);  // Create directory if it does not exist 
       } 
       if(is_dir("$desired_dir/".$file_name) == false){ 
        move_uploaded_file($file_tmp,"$desired_dir/".$file_name); 
       }else{         // rename the file if another one exist 
        $new_dir = "$desired_dir/".$file_name.time(); 
        rename($file_tmp,$new_dir) ;    
       } 
      }else{ 
       $filesErrors++; 
       print_r($errors); 
      } 
     } 

     if ($filesErrors == 0){ 
      echo 'Success'; 
     } 
    } 
?> 


<form action="" method="POST" enctype="multipart/form-data"> 
    <input type="file" name="files[]"> <br/> 
    <input type="file" name="files[]"> <br/> 
    <input type="file" name="files[]"> <br/> 
    <input type="file" name="files[]"> <br/> 
    <input type="file" name="files[]" > <br/><br/> 
    <input type="submit"/> 
</form>