2012-12-07 40 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