2014-02-21 86 views
0

所以我有這樣的形式在for循環中,其提交給自己,並得到用戶上傳圖片,表單代碼:PHP - 上傳文件腳本在for循環

for ($x=1; $x<=10; $x++) 
    { 
    echo "<form method='post' enctype='multipart/form-data'>"; 

    echo " 
    <label for='file'>Image:</label> 
    <input type='file' name='file'><br> 
    <input type='submit' name='submit' value='Upload Image'> 
    <br>"; 

    include ('lib/upload.php'); 
    } 

形式隨後將調用腳本名爲「upload.php的」,其中包含這些代碼:

<?php 
    if (isset($_POST['submit'])) 
    { 
     $allowedext=array("gif", "png", "jpeg", "jpg"); 
     $tmp=explode(".", $_FILES["file"]["name"]); 
     $ext=end($tmp); 

     if (
     (($_FILES["file"]["type"]=="image/gif") || 
     ($_FILES["file"]["type"]=="image/jpeg") || 
     ($_FILES["file"]["type"]=="image/jpg") || 
     ($_FILES["file"]["type"]=="image/pjpeg") || 
     ($_FILES["file"]["type"]=="image/png") || 
     ($_FILES["file"]["type"]=="image/x-png")) && 
     ($_FILES["file"]["size"]<=3145728) && in_array($ext, $allowedext) 
     ) 
     { 
      if ($_FILES["file"]["error"]>0) 
      { 
       echo "<br>Error: ".$_FILES["file"]["error"]."<br>"; 
      } 
      else 
      { 
       if (file_exists("upload/".$_FILES["file"]["name"])) 
       { 
        echo "<br><p style='color: #ff0000;'>".$_FILES["file"]["name"]." already exists.</p><br>"; 
       } 
       else 
       { 
        move_uploaded_file($_FILES["file"]["tmp_name"], "upload/".$_FILES["file"]["name"]); 
        $x="upload/".$_FILES["file"]["name"]; 

        echo "<br><img src='$x' width='320px' height='240px'><br>"; 
       } 
      } 
     } 
     else if ($_FILES["file"]["size"]>3145728) 
     { 
      echo "<br><p style='color: #ff0000;'>File too large</p><br>"; 
     } 
     else 
     { 
      echo "<br><p style='color:#ff0000;'>Invalid file</p><br>"; 
     } 
    } 
    ?> 

所以我的問題是,每次我上傳的圖像,錯誤「無效文件」來了,即使我敢肯定,我上傳了一個有效文件。這工作,如果我循環一次形式,如下所示:

for ($x=1; $x<=1; $x++) 
    { 
     \\code 
    } 

任何想法是什麼問題可能是什麼?

回答

1

我發現在你的代碼在多文件上傳的過程 一些錯誤,也是東西錯了:在你

第一代碼段有有一個for循環,而這種代碼是錯誤的 包括(「LIB /upload.php');我不知道爲什麼沒有發生錯誤, 但你應該使用include_onde來代替include.this是你的代碼錯誤。

與多文件上傳你不需要創建多個表格,你應該創建一個表單是這樣的:

<form> 
    <input type='file' name='upload_file[]' /> 
    <input type='file' name='upload_file[]' /> 
    <input type='file' name='upload_file[]' /> 
    <input type='file' name='upload_file[]' /> 
</form> 

並在該php是這樣的:

foreach ($_FILES as $key => $value) 
{ 

    foreach($value as $k=>$v) 
    { 
      if($k !== "error") 
      { 
       $_FILES[$key][$k] = array_filter($v); 
      }     
    } 
} 
$name = $_FILES['upload_file']['name']; 
if(empty($name)) 
{ 
    //do whatever you want to tell user no file uploaded 
} 

上面的代碼是刪除空的上傳文件形式$ _FILES;

然後

$tmp_name=$_FILES['upload_file']['tmp_name']; 
$size=$_FILES['upload_file']['size']; 
$error=$_FILES['upload_file']['error']; 
$filepath = "/usr/www/project/image/"; 
$ext="get ext by yourself";//like ".jpg" 
foreach($name as $key=>$value) 
{ 
    move_uploaded_file($tmp_name["{$key}"], $filepath.$value.$ext); 
    //do other thing here one by one. 
} 

享受youself ..

+0

呦感謝耶! –

0

您忘記在for循環結尾處添加</form>

for ($x=1; $x<=10; $x++) 
    { 
    echo "<form method='post' enctype='multipart/form-data'>"; 

    echo " 
    <label for='file'>Image:</label> 
    <input type='file' name='file'><br> 
    <input type='submit' name='submit' value='Upload Image'> 
    <br></form>"; //end form here 

    include ('lib/upload.php'); 
    } 

你的形式不打烊所以與其他形式的創建問題。 但它被關閉,然後所有表單都可以正常工作。