0

我制作了一个上传脚本来上传多张图片。这很好用,但我想将文件名添加到数据库中。

我的问题是只有最后一张上传的图片被添加到数据库中。这是因为我不知道如何将数据数组从控制器传递给模型。

我要上传的代码如下所示(控制器):

public function aanbiedingenadd() //functie om ze toe te voegen aan de database
{       
    $files = $_FILES;
    echo '<pre>';
    print_r($files);
    $cpt = count($_FILES['userfile']['name']);
    for($i=0; $i<$cpt; $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];    

        $this->upload->initialize($this->set_upload_options());
        $this->upload->do_upload();
        $image_data = $this->upload->data();
    }
    print_r($image_data);
    print_r($this->upload->display_errors());
    $this->aanbieding_model->addaanbieding($image_data);
    redirect("members/aanbiedingen");
}

print_r($files)向我显示所有上传的文件及其大小、宽度、高度等。

print_r($image_data);只显示上传的最后一张图片。

我的模型如下所示:

        $insert_data = array(
            'fotonaam' => $image_data['file_name']
        );
        print_r($insert_data);
        die;
        $input = $this->input->post('userfile');
        if(isset($input)){
            $this->db->insert('fotoaanbiedingen', $insert_data);
        }else{
            return FALSE;
        }

print_r($insert_data);给我看

Array
(
    [fotonaam] => 'nameoflastuploadedimage'
)

如何将其添加到数组中并一一添加?

4

3 回答 3

1

将此行放入for loop

$this->aanbieding_model->addaanbieding($image_data);
于 2013-07-25T08:49:12.420 回答
0

请做一个这样的finction:-

public function fileUpload(&$uploadFileData,$field)
{
    $config1['allowed_types'] = 'gif|jpg|jpeg|png';
    $config1['upload_path']     = ABSOLUTEPATH.'category/original/';
    $config1['optional']        = true;
    $config1['max_size']        = '0';
    $config1['max_width']       = '00';
    $this->load->library('upload', $config1);
    if (!$this->upload->do_upload($field,true))
    {
        $error = array('error' => $this->upload->display_errors());
        $r = $error;
    }
    else
    {
        $data = array('upload_data' => $this->upload->data());
        $r = "sucess";
    }
    $uploadFileData[$field] = $this->upload->file_name;
    return $r;
}

并称之为: -

    $field = 'userfile';
    $uploadFileData = array();
    $uploadFileData[$field.'_err'] = '';
    $isUploaded = $this->fileUpload($uploadFileData,$field);
    if($isUploaded != "sucess")
     {
     echo "error";
    }
    else
    {
    $imagename = $uploadFileData[$field];
    }
于 2013-07-25T09:05:52.787 回答
0

进入$this->aanbieding_model->addaanbieding($image_data);你的 for 循环,基本上就是这样。

如果你上传了很多图片,你可能应该使用一个数组来收集所有的图片数据,然后在你的模型中使用insert_batch() 。

例如在您的控制器中:

$images = array();
$files = $_FILES;
$cpt = count($_FILES['userfile']['name']);
for($i=0; $i<$cpt; $i++)
{
  // your upload routine here
  $images[] = $this->upload->data();
}

$this->aanbieding_model->addaanbieding($images);

在您的模型中,您将使用$this->db->insert_batch('fotoaanbiedingen', $insert_data);而不是仅插入。

希望有帮助!

于 2013-07-25T08:50:05.810 回答