Php 多文件上载codeigniter不工作

Php 多文件上载codeigniter不工作,php,codeigniter,file-upload,Php,Codeigniter,File Upload,我有一个表单,可以上传多个文件,还有一个名称字段和一个日期字段。用户可以克隆输入并根据需要上传任意数量的证书。我的HTML如下: HTML: PHP: $uid=1; 如果(isset($\u文件['certificate'])) { $this->uploadcertificate($uid,$this->input->post('certificate\u name'),$this->input->post('expiration\u date'); } 函数上载证书($uid,$certi

我有一个表单,可以上传多个文件,还有一个名称字段和一个日期字段。用户可以克隆输入并根据需要上传任意数量的证书。我的HTML如下:

HTML:

PHP:

$uid=1;
如果(isset($\u文件['certificate']))
{
$this->uploadcertificate($uid,$this->input->post('certificate\u name'),$this->input->post('expiration\u date');
}
函数上载证书($uid,$certificate,$expiration\u date)
{
$status=“”;
$msg=”“;
$file_element_name='certificate';
$certificate\u name=$certificate;
如果($status!=“error”)
{
$config['upload_path']='./证书文件/';
$config['allowed_types']=“pdf | doc | docx | txt | png | gif | jpg | jpeg |”;
$config['max_size']=1024*8;
$config['encrypt_name']=TRUE;
$this->load->library('upload',$config);
如果(!$this->upload->do\u upload($file\u element\u name))
{   
$status='error';
$msg=$this->upload->display_errors();
}
其他的
{
$data=$this->upload->data();
$file\u id=$this->saveCertificate($uid、$data['raw\u name']、$data['file\u ext']、$certificate\u name、$expiration\u date);
}
如果($file\u id)
{
$status=“成功”;
$msg=“文件已成功上载”;
}
其他的
{
//取消链接($data['full_path');
$status=“error”;
$msg=“保存文件时出现问题,请重试。”;
}
}   
echo json_编码(数组('status'=>$status,'msg'=>$msg));
}
函数saveCertificate($uid、$file\u name、$file\u ext、$certificate\u name、$expiration\u date)
{
对于($ix=0;$ix$uid),
“certificate'=>$\u POST['certificate\u name'][$ix],
“证书名称”=>$发布['child\u dob\u additional'][$ix],
“到期日”=>$邮政[“到期日”][$ix]
);
$insert=$this->db->insert('certificates',$insert\u certificates);
//return$insert;//不能在此处返回。必须让循环完成。
$insert\u证书\u历史记录=数组(
'user_ID'=>$uid,
“certificate'=>$\u POST['certificate\u name'][$ix],
“证书名称”=>$发布['child\u dob\u additional'][$ix],
“到期日”=>$邮政[“到期日”][$ix]
);
$insert=$this->db->insert('certificates\u history',$insert\u certificates\u history);
}
}

我不知道我到底错在哪里了。谁能给我指一下正确的方向吗。非常感谢

上载库一次只处理一个文件上载,并且它不是为使用数组而构建的。解决方案是一个接一个地处理上传,但我现在还不能快速找到解决方案…@Svetlio我已经试过了,但没有成功。我正在尝试其他事情,谢谢你们的帮助
<input type="file" name="certificate[]" />
<input type="text" name="certificate_name[]" class="right" />
<input type="text" name="expiry_date[]" />
A PHP Error was encountered
Severity: Warning
Message: is_uploaded_file() expects parameter 1 to be string, array given
Filename: libraries/Upload.php
Line Number: 161
$uid = 1;

if(isset($_FILES['certificate']))
{
    $this->uploadcertificate($uid, $this->input->post('certificate_name'), $this->input->post('expiry_date'));
}

function uploadcertificate($uid, $certificate, $expiry_date)
{
    $status = "";
    $msg = "";
    $file_element_name = 'certificate';
    $certificate_name = $certificate;
    if ($status != "error")
    {
        $config['upload_path'] = './certificate_files/';
        $config['allowed_types'] = 'pdf|doc|docx|txt|png|gif|jpg|jpeg|';
        $config['max_size']  = 1024 * 8;
        $config['encrypt_name'] = TRUE;

        $this->load->library('upload', $config);

        if (!$this->upload->do_upload($file_element_name))
        {   
            $status = 'error';
            $msg = $this->upload->display_errors();
        }
        else
        {
            $data = $this->upload->data();
            $file_id = $this->saveCertificate($uid, $data['raw_name'], $data['file_ext'], $certificate_name, $expiry_date);
        }
        if($file_id)
        {
            $status = "success";
            $msg = "File successfully uploaded";
        }
        else
        {
            //unlink($data['full_path']);
            $status = "error";
            $msg = "Something went wrong when saving the file, please try again.";
        }
    }   
    echo json_encode(array('status' => $status, 'msg' => $msg));
}


function saveCertificate($uid, $file_name, $file_ext, $certificate_name, $expiry_date)
{
    for ($ix=0; $ix<count($_FILES['certificate']); $ix++)
    {
        $insert_certificates = array(
            'user_ID' => $uid,
            'certificate' => $_POST['certificate_name'][$ix],
            'certificate_name' => $_POST['child_dob_additional'][$ix],
            'expiry_date' => $_POST['expiry_date'][$ix]
        );

        $insert = $this->db->insert('certificates', $insert_certificates);
        //return $insert; //you cant return here. must let the loop complete.

        $insert_certificates_history = array(
            'user_ID' => $uid,
            'certificate' => $_POST['certificate_name'][$ix],
            'certificate_name' => $_POST['child_dob_additional'][$ix],
            'expiry_date' => $_POST['expiry_date'][$ix]
        );

        $insert = $this->db->insert('certificates_history', $insert_certificates_history);

    }
}