概述
我有一个包含四个文件上传字段的多部分表单,其中三个是动态添加的(使用 JavaScript)。
<input type="file" name="OneCertificate" />
<input type="file" id="MultipleCertificate[1] "name="MultipleCertificate[]" />
<input type="file" id="MultipleCertificate[2] "name="MultipleCertificate[]" />
// more if Add button is pressed
这是输出var_dump($_FILES)
:
["OneCertificate"]=> array(5) {
["name"]=> string(6) "DE.pdf"
["type"]=> string(15) "application/pdf"
["tmp_name"]=> string(24) "C:\xampp\tmp\php37C2.tmp"
["error"]=> int(0)
["size"]=> int(103845)
}
// **Notice the attributes are all in their own arrays**
["MultipleCertificate"]=> array(5) {
["name"]=> array(2) { [0]=> string(6) "DE.pdf" [1]=> string(6) "DE.pdf" }
["type"]=> array(2) { [0]=> string(15) "application/pdf" [1]=> string(15) "application/pdf" }
["tmp_name"]=> array(2) { [0]=> string(24) "C:\xampp\tmp\phpD941.tmp" [1]=> string(24) "C:\xampp\tmp\phpD942.tmp" }
["error"]=> array(2) { [0]=> int(0) [1]=> int(0) }
["size"]=> array(2) { [0]=> int(103845) [1]=> int(103845) }
}
// and so on...
以下是我上传每个文件的方式:
function upload_file($field_name)
{
// timestamp name: http://stackoverflow.com/questions/7457152/did-not-select-a-file-to-upload-when-uploading-using-codeigniter
$the_date= date('Y/n/j h:i:s');
$replace = array(":"," ","/");
$new_name = str_ireplace($replace, "-", $the_date);
$config['upload_path'] = './uploads/';
$config['file_name'] = $new_name;
$config['allowed_types'] = 'pdf|jpg|jpeg|png';
$this->load->library('upload');
$this->upload->initialize($config);
// Get OneCertificate the normal way since it will only have one file content
if ( $field_name == 'OneCertificate' ) {
if ( ! $this->upload->do_upload($field_name)) {
return array('error' => $this->upload->display_errors());
} else {
$file_data = array('upload_data' => $this->upload->data());
}
// Method for MultipleCertificate
} else {
for ($i = 0; $i < count($_FILES[$field_name]['name']); $i++) {
if ( ! $this->upload->do_upload($_FILES[$field_name]['name'][$i])) {
$file_data = array('error' => $this->upload->display_errors());
} else {
$file_data = array('upload_data' => $this->upload->data());
}
} // END for loop
}
return $file_data;
}
问题
我注意到OneCertificate
作品的格式,因为它的所有信息都在一个数组中,而MultipleCertificate
每个属性都在它自己的数组中。
第一个设法成功上传文件,但后者抛出你没有选择要上传的文件。
如何转换和/或检索MultipleCertificate
into的形式OneCertificate
?
注意:这是我需要的表格,因为我会将创建的数组分配给$OneCertificate
数据库$MultipleCertificate
插入。