2015-12-22 70 views
2

我目前有一個用戶的上傳選項,它將上傳到一個文件夾,並更新數據庫的文件名稱,然後稍後檢索。PHP上傳 - 多個文件和限制文件類型

我希望能夠進行多次上傳,並且每個上傳的文件會按照他們選擇的上傳字段進入特定列並上傳所述文件。

3瀏覽部分(上傳選項),1是badgephoto,2是駕駛執照,3是社會保障卡。

如果可能,請將每個文件上傳到各自指定的文件夾位置。

我想也限制所有文件的例外圖像類型,PDF或文檔文件。

我目前有以下幾種。

if(isset($_POST['btn-upload'])) 
{  

    $file = rand(1000,100000)."-".$_FILES['file']['name']; 
    $file_loc = $_FILES['file']['tmp_name']; 
    $file_size = $_FILES['file']['size']; 
    $file_type = $_FILES['file']['type']; 
    $folder="badge/"; 

    // new file size in KB 
    $new_size = $file_size/1024; 
    // new file size in KB 

    // make file name in lower case 
    $new_file_name = strtolower($file); 
    // make file name in lower case 

    $final_file=str_replace(' ',$FirstName,$new_file_name); 

    if(move_uploaded_file($file_loc,$folder.$final_file)) 
    { 
     $sql="UPDATE users t1 SET t1.badgephoto='$final_file', t1.badgetype='$file_type', t1.badgesize='$new_size' WHERE t1.API='$API'"; 

     mysql_query($sql); 
     ?> 
     <script> 
     alert('successfully uploaded'); 
     window.location.href='badgephoto.php?success'; 
     </script> 
     <?php 
    } 
    else 
    { 
?> 
     <script> 
     alert('error while uploading file'); 
     window.location.href='badgephoto.php?fail'; 
     </script> 
     <?php 
    } 
} 

HTML

<form action="badgephoto.php" method="post" enctype="multipart/form-data"> 
    <input type="file" name="file" accept="application/msword, text/plain, application/pdf, image/*" /> <!-- would be badgephoto --> 
    <input type="file" name="file_drivers" accept="application/msword, text/plain, application/pdf, image/*" /> 
    <input type="file" name="file_social" accept="application/msword, text/plain, application/pdf, image/*" /> 
    <button type="submit" name="btn-upload">Upload Badge Photo</button> 
    </form> 

任何幫助將不勝感激。

+0

http://stackoverflow.com/questions/6755192/uploaded-file-type-check-by-php ---參考這篇文章 – pTi

+0

真的不明白,我怎麼會構建成我的代碼。 @pTi – Kray

+1

檢查下面給出的完整代碼 – pTi

回答

1
if(isset($_POST['btn-upload'])) 
{  
    foreach ($_FILES as $key => $value) { 
    $file = rand(1000,100000)."-".$_FILES[$key]['name']; 
    $file_loc = $_FILES[$key]['tmp_name']; 
    $file_size = $_FILES[$key]['size']; 
    $file_type = $_FILES[$key]['type']; 
    $folder="badge/"; 

    // new file size in KB 
    $new_size = $file_size/1024; 
    // new file size in KB 

    // make file name in lower case 
    $new_file_name = strtolower($file); 
    // make file name in lower case 

    $final_file=str_replace(' ',$FirstName,$new_file_name); 

    $allowedTypes = array(IMAGETYPE_PNG, IMAGETYPE_JPEG, IMAGETYPE_GIF); 
    $detectedType = exif_imagetype($file_loc); 
    $fileTypecorrect = in_array($detectedType, $allowedTypes); 


     if($new_size < 5120 && $fileTypecorrect){ 

      if(move_uploaded_file($file_loc,$folder.$final_file)) 
      { 
       $sql="UPDATE users t1 SET t1.badgephoto='$final_file', t1.badgetype='$file_type', t1.badgesize='$new_size' WHERE t1.API='$API'"; 

       mysql_query($sql); 
       ?> 
       <script> 
       alert('successfully uploaded'); 
       window.location.href='badgephoto.php?success'; 
       </script> 
       <?php 
      } 
     } 
    } 
    else 
    { 
?> 
     <script> 
     alert('error while uploading file'); 
     window.location.href='badgephoto.php?fail'; 
     </script> 
     <?php 
    } 
} 
+0

添加代碼與多個文件上傳 – pTi

+0

你的html表單應該使用「」 – pTi

+0

好吧,我明白了。通過編輯,您不會將圖像的路徑上傳到數據庫表中的新列。它的結構化方式是,將3個名稱寫入一列,並在前一個上傳名稱的右上方。對? @pTi – Kray