2012-12-07 36 views
0

我正在用PHP和HTML創建上傳腳本,可以有任意數量的文件上傳。我循環並回顯任意數量的文件上傳,並使用循環命名每個文件「fileField1」,「fileField2」等。

現在我想檢索該字段中的文件的名稱。我可以像這樣在另一個循環中使用變量嗎?

$fileField = 'fileField'.$i; 

    $fileName = $_FILES[$fileField]['name']; // Name of file 

這是包含在循環內,這將工作嗎?

我相信我遇到一個錯誤......

$ I的增加每次一($ I ++)

編輯

請注意,我永遠達不到發表談話。 ..

這裏是整個循環:

$i = 1; 
while ($i <= $numberOfFields) { 
$fileField = 'fileField'.$i; 
$titleId = 'title'.$i; 
$genreId = 'genre'.$i; 

    $fileName = $_FILES[$fileField]['name']; // Name of file 

    if($fileName !=""){ 
     $randNum = rand(1000000000,9999999999); //Generate random number 

     $newFileName = $fileName."-".$randNum; //Rename file 

      if (file_exists($baseUrl."images/".$newFileName)){ 
      echo $newFileName." already exists. "; 
      }else{  
       if(isset($_POST[$titleId]) && !empty($_POST[$titleId])){ 
        // Assign url, title, genre 
        $url = 'images/'.$newFileName;   
        $title = $_POST[$titleId];   
        $genre = $_POST[$genreId]; 
        // Execute final query and upload 
        $sql = "INSERT INTO images (url,title,genre) VALUES (:url,:title,:genre)"; 
        $q = $conn->prepare($sql); 
        $q->execute(array(':url'=>$url, 
             ':title'=>$title, 
             ':genre'=>$genre));  
        if(copy($_FILES['fileField']['tmp_name'],'../images/'.$newFileName)) { 
         $NOTICE = 'File successfully uploaded!'; 
         // I AM NEVER REACHING THIS NOTICE WHICH IS ECHOED LATER ON IN THE CODE 
        } 
       }else{ 
        $NOTICE = "Please fill out the title for picture ".$i; 
        break;     
       } 
      } 
    }else{ 
     $NOTICE = "Please select a file to upload in slot ".$i; 
     break; 
    } 
    $i++; 
    } 
+1

是什麼讓你「相信你會遇到錯誤」?我建議你在這裏發佈更多的代碼,我現在可以看到的可能可以工作。 – jtheman

+0

爲什麼不先嚐試一下,問問題 – samayo

+0

我加了整個循環......我一般都有問題,所有的數據都上傳到MySQL數據庫,但是文件從來沒有到達目的地文件夾 @Eritrea ...我沒有嘗試過,並試圖解決它。我的主要問題是,我可以但在[]這樣的變量... – Skovy

回答

1
if(copy($_FILES['fileField']['tmp_name'],'../images/'.$newFileName)) { 

我認爲應該是:

if(move_uploaded_file($_FILES['fileField']['tmp_name'],'../images/'.$newFileName)) { 

是的,你可以把變量[]這樣的。只要它們有效並且不會導致未定義的偏移錯誤。

+0

我試過這個,但它仍然沒有工作...有可能是我的目錄列表搞砸了嗎?我在我的public_html目錄下有'images'文件夾,但是這個腳本在'admin/upload.php'中,但是使用'../'它應該回到public_html目錄,然後是圖像目錄?正確?它曾經工作,但我加入循環做多文件上傳,只有這個部分搞砸了...... – Skovy

+0

不一定。我處理文件時使用絕對路徑:$ _SERVER ['DOCUMENT_ROOT']。「/ mysite/media/images/".$ newFileName - 顯然用你的實際路徑代替路徑...愚蠢的問題,但你確定你的表單有enctype =「multipart/form-data」參數集? –

+0

不,你想幫忙,所以這不是一個愚蠢的問題,是的,我做。它曾經在昨天工作,但我想讓它變得更加動態,而不是一次寫入一個文件,所以我做到了,所以你可以一次做20次......並且我將使用根目錄並查看是否會產生任何積極結果。 – Skovy

1

請勿使用copy。首先使用move_uploaded_file,然後對上傳的文件執行任何操作。文件上傳到一個特殊的臨時位置。

+0

我試過了,但仍然無法正常工作......可能有些東西與我的目錄列表混淆了?我在我的public_html目錄下有'images'文件夾,但是這個腳本在'admin/upload.php'中,但是使用'../'它應該回到public_html目錄,然後是圖像目錄?正確?它曾經工作,但我在循環中添加了多文件上傳,只有這個部分搞砸了...... – Skovy