2011-05-18 50 views
1

我有一个表单,允许用户添加任意​​数量的上传表单。所以最初有一个,你可以点击“添加更多”以添加更多内容。说得通。每个输入如下:多个上传按预期工作

<input type="file" name="userfile[]" id="userfile[]"> 

但是当你上传多个文件,只有第一个文件被上传。以下是我的PHP。我正在使用CodeIgniter和文件上传库。

$dir = random_string('alnum', 10); 
mkdir('/Applications/MAMP/htdocs/extras/uploads/temp/'.$dir); 

$this->load->library('upload'); 
$error = 0; 

for ($i = 0; $i < count($_FILES['userfile']['name']); $i++): 
    $_FILES['userfile']['name']    = $_FILES['userfile']['name'][$i]; 
    $_FILES['userfile']['type']    = $_FILES['userfile']['type'][$i]; 
    $_FILES['userfile']['tmp_name']  = $_FILES['userfile']['tmp_name'][$i]; 
    $_FILES['userfile']['error']   = $_FILES['userfile']['error'][$i]; 
    $_FILES['userfile']['size']    = $_FILES['userfile']['size'][$i]; 

    $config['upload_path']       = '/Applications/MAMP/htdocs/extras/uploads/temp/'.$dir; 
    $config['allowed_types']     = 'jpg|jpeg|gif|png'; 

    $this->upload->initialize($config); 

    if ($this->upload->do_upload('userfile')): 
     $error += 0; 
    else: 
     $error += 1; 
    endif; 
endfor; 

if ($error > 0): 
    $error = array('error' => $this->upload->display_errors()); 
    print_r($error); 
else: 
    $data = array('upload_data' => $this->upload->data()); 
    print_r($data); 
endif; 

如果我加入前的for循环的echo count($_FILES['userfile']['name'];,它正确地显示文件的数量。如果我在for循环后使用它,它不正确地显示1.

任何想法我在做什么错在这里?

回答

2

我最好的猜测是,一旦你进入循环您使用这些线路覆盖值:

$_FILES['userfile']['name']    = $_FILES['userfile']['name'][$i]; 
$_FILES['userfile']['type']    = $_FILES['userfile']['type'][$i]; 
$_FILES['userfile']['tmp_name']  = $_FILES['userfile']['tmp_name'][$i]; 
$_FILES['userfile']['error']   = $_FILES['userfile']['error'][$i]; 
$_FILES['userfile']['size']    = $_FILES['userfile']['size'][$i]; 

尝试改变,要像这样:

$_FILES['userfile_tmp']['name']    = $_FILES['userfile']['name'][$i]; 
$_FILES['userfile_tmp']['type']    = $_FILES['userfile']['type'][$i]; 
$_FILES['userfile_tmp']['tmp_name']  = $_FILES['userfile']['tmp_name'][$i]; 
$_FILES['userfile_tmp']['error']   = $_FILES['userfile']['error'][$i]; 
$_FILES['userfile_tmp']['size']    = $_FILES['userfile']['size'][$i]; 

,然后使用if ($this->upload->do_upload('userfile_tmp')):

+0

谢谢,这工作。 – dallen 2011-05-19 05:44:48

0

问题是这些行:

$_FILES['userfile']['name'] = $_FILES['userfile']['name'][$i]; 

您正在用另一个值,一个字符串覆盖变量,一个数组。