0

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

HTML:

<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

PHP:

$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);

    }
}

我很困惑我到底哪里出错了。谁能指出我正确的方向。提前谢谢了!

4

0 回答 0