2014-09-24 58 views
0

我試圖讓我的系統上傳一個文件,具體取決於從列表中選擇的幾個作業。PHP根據多個變量ID上傳單個文件

系統將從本質上選擇作業,允許用戶上傳與所有這些作業相關的文件,這些文件存儲在具有唯一標識的數據庫中。

到目前爲止,它似乎只上傳數組中第一個id的文件。如何多次上傳文件,使用文件名中的每個作業ID分別定義每個文件?

這是循環至今:

if ($_FILES["file"]["type"] != "") { 

        $count++; 
        $uploadComplete = 0; 

        $newFileName = date("YmdHis"); 
        $newFileName = $newFileName . "-TEST".$multiId[$i]."-"; 
        $newFileName2 = $newFileName . "-"; 

        $newFileName2 = $_FILES["file"]["name"]; 
        $newFileName2 = str_replace(" ", "-", $newFileName2); 


        $ext = strrchr($_FILES["file"]["name"], "."); 

        if (($ext == ".png") 
        || ($ext == ".jpeg") 
        || ($ext == ".pjpeg") 
        || ($ext == ".jpg") 
        || ($ext == ".PNG") 
        || ($ext == ".JPEG") 
        || ($ext == ".PJPEG") 
        || ($ext == ".JPG")) { 
         $fileType = "image";  
        } 

        if (($ext == ".pdf") 
        || ($ext == ".doc") 
        || ($ext == ".docx") 
        || ($ext == ".zip") 
        || ($ext == ".PDF") 
        || ($ext == ".DOC") 
        || ($ext == ".DOCX") 
        || ($ext == ".ZIP")) { 
         $fileType = "file"; 
        } 



        if (($ext == ".png") 
        || ($ext == ".jpeg") 
        || ($ext == ".pjpeg") 
        || ($ext == ".jpg") 
        || ($ext == ".pdf") 
        || ($ext == ".doc") 
        || ($ext == ".docx") 
        || ($ext == ".zip") 
        || ($ext == ".PNG") 
        || ($ext == ".JPEG") 
        || ($ext == ".PJPEG") 
        || ($ext == ".JPG") 
        || ($ext == ".PDF") 
        || ($ext == ".DOC") 
        || ($ext == ".DOCX") 
        || ($ext == ".ZIP") 
        && ($_FILES["file"]["size"] < 10000000)){ 

         if ($_FILES["file"]["error"] > 0) { 

          echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; 

         } else { 


         if (file_exists("../../uploads/logdocs/".$newFileName . $_FILES["file"]["name"])) { 

          //nothing 

         } else { 

          move_uploaded_file($_FILES["file"]["tmp_name"],"../../uploads/logdocs/" .$newFileName . $newFileName2); 

          $fileLocation = "/uploads/logdocs/" .$newFileName . $newFileName2; 

          if (empty($fileLocation)) { 
           $uploadComplete = 0; 
          } else { 
           $uploadComplete = 1; 
          } 
         } 
         } 
        } 
       } else { 

        $uploadComplete = 1; 
       } 

       if ($uploadComplete == 1) { 

        mysql_query("UPDATE system_modificationsLogs 
         SET 
         modificationLogUpload = '$fileLocation' 
         WHERE modificationsLogId = '$modificationsLogId'"); 
       } 
+0

我建議你爲那些大的ifs使用一個數組,你可以使用if(in_array($ ext,$ arrayWithExtensions))它看起來會更好,並且你將有很少的代碼行。 – Alex7 2014-09-24 13:29:36

回答

0

我假設你是在一個循環做這個。 在第一次迭代中,這行代碼正確地「上傳」,或者更準確地移動位於tmp位置的文件。

move_uploaded_file($_FILES["file"]["tmp_name"],"../../uploads/logdocs/" .$newFileName . $newFileName2); 

在第二和後面的迭代(S)你要回來過,並嘗試移動相同的文件,但該文件已不再存在,因爲你在第一個itteration移動它。

您可以使用copy而不是move_uploaded_file。

copy($_FILES["file"]["tmp_name"], "../../uploads/logdocs/" .$newFileName . $newFileName2); 

這將複製文件並將原始tmp文件留在原位以便稍後被複制。

在腳本執行結束時,tmp文件將被銷燬。

+0

非常感謝您的幫助。這個竅門! – 2014-09-24 13:40:08