【问题标题】:Multiple image upload with Codeigniter saving only one file path to MySQL Database使用 Codeigniter 上传多张图片,只保存一个文件路径到 MySQL 数据库
【发布时间】:2016-02-18 02:41:39
【问题描述】:

现在我正在构建一个应用程序。我已经设置了一个表单,可以将多个图像上传到数据库。这是我的简单代码

查看

<?php echo form_open_multipart('admin/product/post'); ?>
<table class="table table-stripped">
    <tbody>
        <tr>
            <td>Code</td>
            <td>
                <?php echo form_input(array('class'=>'form-control','name'=>'kodeproduk')); ?>                                  
            </td>
        </tr>
        <tr>
            <td>Display</td>
            <td>
                <input class="form-control" type="file" name="userfile[]" id="multiple" multiple="" />    
            </td>
        </tr>
        <tr>
            <td>Description</td>
            <td>
                <div class="textarea textarea-editor">
                    <textarea name="ket" cols="50" rows="5" class="form-control"></textarea>
                </div>                                  
            </td>
        </tr>
        <tr>
            <td colspan="2">
                <button type="submit" class="btn btn-primary btn-outline btn-block pull-right"><span>Save</span></button>
            </td>
        </tr>
    </tbody>
</table>
<?php echo form_close(); ?>

控制器

public function post(){        
    if($this->_validation()===FALSE){ 
        $this->session->set_flashdata('error', 'Ooops, there was an error');
        redirect(base_url("admin/product"));
    }else{
        $files = $_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();
            $fileName = $_FILES['userfile']['name'];
            $images[] = $fileName;
        }
        $fileName = implode(',',$images);

        $data = array(  'kodeProduk'                => $this->input->post('kodeproduk'),
                        'ket'                       => $this->input->post('ket'),

                        'GambarBesar'               => $fileName
        );

        unset($data['submit']);                             
        $this->table->add_record($data);
        $this->session->set_flashdata('success', 'Product has been saved.');
        redirect(base_url("admin/product"));
    }   
}

型号

public function add_record($data){
    $this->db->insert('produk', $data);
    return;
}

当我发布它时,我遇到了一个问题,所有图像文件都上传到服务器上的目录中,但实际上只有一个图像作为一行存储到 MySQL 表中。那么如何修复我的代码?谢谢提前

【问题讨论】:

  • 看起来你的 add_record 是在循环结束之后并且只会运行一次
  • @MattinWashington 我已经检查过了,我试过这个tutorial,但它仍然只有一张图像存储在数据库中

标签: php mysql codeigniter


【解决方案1】:

好的,一些小的改动可能会有所帮助

public function post(){        
    if($this->_validation()===FALSE){ 
        $this->session->set_flashdata('error', 'Ooops, there was an error');
        redirect(base_url("admin/product"));
    }else{
        $files = $_FILES;
        $images = array();
        $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();
            $images[] = $_FILES['userfile']['name'];
        }
        $fileName = implode(',',$images);

        $data = array(  'kodeProduk'                => $this->input->post('kodeproduk'),
                        'ket'                       => $this->input->post('ket'),

                        'GambarBesar'               => $fileName
        );

        unset($data['submit']);                             
        $this->table->add_record($data);
        $this->session->set_flashdata('success', 'Product has been saved.');
        redirect(base_url("admin/product"));
    }   
}

【讨论】:

    【解决方案2】:

    请试试这段代码,希望能解决

    $files = $_FILES;
            $cpt = count($_FILES['fl']['name']);
            if($cpt<=10)
            {
                $number_of_files = sizeof($_FILES['fl']['tmp_name']);
                $files = $_FILES['fl'];
                $errors = array();
    
                for($i=0;$i<$number_of_files;$i++)
                {
                    if($_FILES['fl']['error'][$i] != 0) $errors[$i][] = 'Couldn\'t upload file '.$_FILES['fl']['name'][$i];
                }
                    if(sizeof($errors)==0)
                    {
                        $this->load->library('upload');
                        $config['upload_path'] = FCPATH . './assets/upload/multiple/';
                        $config['allowed_types'] = 'gif|jpg|png|jpeg';
                        for ($i = 0; $i < $number_of_files; $i++) {
                            //$_FILES['uploadedimage']['ext'] = $this->get_extension($files['name'][$i]);
                            //echo $_FILES['uploadedimage']['ext'];
    
                            $_FILES['uploadedimage']['name'] = time().$i.$files['name'][$i];
                            $_FILES['uploadedimage']['type'] = $files['type'][$i];
                            $_FILES['uploadedimage']['tmp_name'] = $files['tmp_name'][$i];
                            $_FILES['uploadedimage']['error'] = $files['error'][$i];
                            $_FILES['uploadedimage']['size'] = $files['size'][$i];
                        $fileName[] = $_FILES['uploadedimage']['name'];
    
                        $this->upload->initialize($config);
                        if ($this->upload->do_upload('uploadedimage'))
                        {
                            $data['uploads'][$i] = $this->upload->data();
                        }
                        else
                        {
                            $data['upload_errors'][$i] = $this->upload->display_errors();
                    }
                }
            }
        $fname=implode(",",$fileName);
    

    【讨论】:

      猜你喜欢
      • 2013-08-03
      • 2015-04-20
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多