2016-10-03 137 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>