2013-04-04 120 views
1

我有一個表格將文件上傳到服務器,在下面給出:PHP多文件上傳問題

<form action="/upload/" method="post" enctype="multipart/form-data"> 
<? foreach($this->devices as $d): ?> 
    <input type="checkbox" name="check_list[]" value="<?=$d['id']?>"/> 
    <?=$d['site']?> 
<? endforeach ?> 

Select Directory: 
<select name="optone" size="1" onchange="setOptions(document.myform.optone.options[document.myform.optone.selectedIndex].value);"> 
    <option value="0">Select the directory</option> 
    <option value="usr">/usr</option> 
</select> 
Select subdirectory: 
<select name="opttwo" size="1"> 
<option value=""></option> 
</select> 

Choose files to upload: <input type="file" id="files" name="files[]" onchange="filesProcess(this.files);" /><br /> 
<output id="list"></output> 
<input type="submit" value="Update" style="align:center"/> 
</form> 

上傳功能如下:

$count=count($_FILES['files']['name']); 
    $i=0; 
    if(!empty($_POST['check_list'])) 
    { 
     foreach($_POST['check_list'] as $check) 
     { 
      $dir=$_POST['optone']; 
      $subdir=$_POST['opttwo']; 
      $dir_folder=$dir."_".$subdir; 
      exec(mkdir("firmware_update/".$check."/",0777)); 
      exec(mkdir("firmware_update/".$check."/".$dir_folder."/",0777)); 
      while($i<$count) 
      { 
       $f=$_FILES['files']['tmp_name'][$i]; 
       $name=$_FILES['files']['name'][$i]; 
       $path="firmware_update/".$check."/".$dir_folder."/".$name; 
       move_uploaded_file($f,$path); 
       $i++; 
      } 
     } 
    } 

據形式,我需要從複選框(例如:56,68等)中選擇網站,從下拉菜單中選擇一個目錄(例如:usr,bin),從第二個下拉菜單中選擇一個子目錄(例如:usr等)以及要上傳的文件。上傳功能運行良好,除了一個小問題。

我們選擇的所有文件應該上傳到不同的文件夾。但是上面的代碼僅僅將文件上傳到第一個文件夾。 例如:如果我們選中複選框56和68,目錄usr和子目錄bin以及文件名是test.php。文件test.php應該上傳到56/usr_bin /和68/usr_bin。但是現在代碼只能用於第一個(56/usr_bin /)。我在哪裏犯錯? 任何幫助,應該感激!

+0

'EXEC(MKDIR( 「firmware_update /".$檢查。」/」 $ dir_folder。 「/」,0777));'爲什麼這裏有'$ dir_folder'?然後再次在'$ path'處設置 – 2013-04-04 05:04:42

+0

$ dir_folder會給出像usr_bin這樣的值。我可以看到56/usr_bin /和68/usr_bin。但是test.php只能在第一個餡餅56/usr_bin /中。 – NewPHP 2013-04-04 05:06:41

+0

但我設置了$ i = 0。我試過4個複選框,但文件只上傳到第一個! – NewPHP 2013-04-04 05:12:24

回答

0

我希望你上傳單個文件到不同的文件夾和$_POST['check_list']確定文件夾。

如果是這樣,您可以將$i=0移動到foreach循環嗎?我希望它發生問題的原因。

請嘗試此代碼。

$count=count($_FILES['files']['name']); 

    if(!empty($_POST['check_list'])) 
    { 
     foreach($_POST['check_list'] as $check) 
     { 
      $i=0; 
      $dir=$_POST['optone']; 
      $subdir=$_POST['opttwo']; 
      $dir_folder=$dir."_".$subdir; 
      exec(mkdir("firmware_update/".$check."/",0777)); 
      exec(mkdir("firmware_update/".$check."/".$dir_folder."/",0777)); 
      while($i<$count) 
      { 
       $f=$_FILES['files']['tmp_name'][$i]; 
       $name=$_FILES['files']['name'][$i]; 
       $path="firmware_update/".$check."/".$dir_folder."/".$name; 
       move_uploaded_file($f,$path); 
       $i++; 
      } 
     } 
    } 
+0

謝謝你的答案,不,它不工作! – NewPHP 2013-04-04 05:47:37