使用相同的输入在codeigniter中上传多个图像

时间:2017-09-19 17:54:01

标签: codeigniter

视图

<form action="" method="POST" enctype="multipart/form-data">
    <input type="file" name="userfile[]" size="40" multiple/>
    <input type="submit" name="submit" value="Upload">
</form>

控制器

        public function image()
                {
                    $data['error'] = '';
                    $this->load->model('StackM');
                    if(isset($_POST['submit']))
                        {
                            $data['update_pass_error_msg']  = $this->StackM->add_multiple_image();
                        }
                    $this->load->view('stack_view'); 
                }

        Model
        public function add_multiple_image(){
                   if((!empty($_FILES['f2']['name'])))
                    {

                        $config['upload_path']          = 'uploads/';
                        $config['allowed_types']        = 'gif|jpg|png|jpeg';

                        $files = $_FILES;

                        if ($files['f2']['name'][0] == '' )
                            {
                                # code...
                                return "Select a file to upload";
                            }
                        else
                            {
                            $mum_files = count($files['f2']);
                            for($i=0; $i<$mum_files; $i++)
                            {

                                if ( isset($files['f2']['name'][$i]) ) 
                                {


                                    $config['file_name'] = time().'-'.$files['f2']['name'][$i];
                                    $this->load->library('upload', $config);

                                    $_FILES['f2']['name']= $files['f2']['name']["$i"];
                                    $_FILES['f2']['type']= $files['f2']['type']["$i"];
                                    $_FILES['f2']['tmp_name']= $files['f2']['tmp_name']["$i"];
                                    $_FILES['f2']['error']= $files['f2']['error']["$i"];
                                    $_FILES['f2']['size']= $files['f2']['size']["$i"];    

                                    $filename = rand().'-'.$_FILES['f2']['name'];

                                     if (!empty($this->upload->do_upload('f2')))
                                    {
                                         $dataInfo[] = $this->upload->data();

                                         $all_imgs = '';

                                            if ( count($dataInfo) > 0) {
                                                # code...
                                                foreach ($dataInfo as $info) {
                                                    # code...
                                                    $all_imgs .= $info['file_name'];
                                                    $all_imgs .= ',';
                                                }
                                            }
                                    }


                               }
                            }

                        }

                }
                else{
                    $all_imgs = "";
                }
    }



} 
else{
$all_imgs = $this->session->userdata('image');
} 



   $this->db->insert('table_name', $all_imgs);

我在这段代码中遇到的问题是想想如果我要添加7张图片,但它只显示数据库中的5张图片,它不会超过5张,而且我想在编辑表格时知道如果我不这样做想要更改图像然后它应该保持相同的图像,所以我已经将旧图像存储在会话中并检查它是否为空,然后它只应该是会话变量。 但在我的代码中如果我不上传新的如果我保留旧图像,那么它将保存空白

2 个答案:

答案 0 :(得分:1)

为避免偏移错误,在for循环内部需要检查是否设置了数组索引: 这里我有一个演示代码来上传CodeIgniter中的多个文件:

视图/ stack_view.php

<?php if ($this->session->flashdata('status')) { ?>

    <h5><?=$this->session->flashdata('status')?>: <?=$this->session->flashdata('message')?></h5>

<?php } ?>

<?=form_open_multipart('stack', array('id' => 'my_id'))?>

  <input type="file" name="userfile[]" size="40" multiple/>
  <input type="submit" name="submit" value="Upload">

<?=form_close()?>

控制器/ Stack.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Stack extends CI_Controller {

    public function __construct()
    {
            parent::__construct();

            $this->load->library('session');
            $this->load->helper(array('form', 'url'));
    }

    public function index()
    {
        if ($this->input->post('submit')) {

            $config['upload_path']          = './uploads/';
            $config['allowed_types']        = 'gif|jpg|png|jpeg';

            $files = $_FILES;

            if ($files['userfile']['name'][0] == '' ) {
                # code...
                $this->session->set_flashdata('status', 'error');
                $this->session->set_flashdata('message', "Select a file to upload");
            }
            else
            {
                $mum_files = count($files['userfile']);
                $dataInfo = array();
                for($i=0; $i<$mum_files; $i++)
                {

                    if ( isset($files['userfile']['name'][$i]) ) {

                        $config['file_name'] = time().'-'.$files['userfile']['name'][$i];
                        $this->load->library('upload', $config);

                        $_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"];    

                        $filename = rand().'-'.$_FILES['userfile']['name'];

                        if ( ! $this->upload->do_upload('userfile'))
                        {
                            $error_message = $this->upload->display_errors();

                            $this->session->set_flashdata('status', 'error');
                            $this->session->set_flashdata('message', "$error_message");
                        }
                        else
                        {
                            //$data = array('upload_data' => $this->upload->data());

                            $this->session->set_flashdata('status', 'success');
                            $this->session->set_flashdata('message', "Files upload is success");
                        }

                        $dataInfo[] = $this->upload->data(); //all the info about the uploaded files are stored in this array

                    }
                }

                //here you can insert all the info about uploaded file into database using $dataInfo
                $all_imgs = '';

                if ( count($dataInfo) > 0) {
                    # code...
                    foreach ($dataInfo as $info) {
                        # code...
                        $all_imgs .= $info['file_name'];
                        $all_imgs .= ',';
                    }
                }

                $insert_data = array(
                   'your_column_name' => rtrim($all_imgs,",")
                );

                $this->db->insert('your_table_name', $insert_data);
            }

        }

        $this->load->view('stack_view');

    }
}

试试这个脚本,我希望你能从中得到一些帮助。

答案 1 :(得分:0)

这是工作脚本,请尝试将其上传     公共功能upload()     {

    $this->load->library('session');

    if ( ! empty($_FILES))
    {


        $config['upload_path'] = "assets/uploads/";
        $config['allowed_types'] = 'jpg|png|jpeg';
        $config['max_size'] = 5120; //limit only 5 Mb

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

        $files           = $_FILES;;
        $number_of_files = count($_FILES['files']['name']);

        $errors = 0;
        $myname = $this->input->post('ad_title');

        for ($i = 0; $i < $number_of_files; $i++)
        {

            //$randVal = rand(450,4550).time('d-y-m');
            $filename  = basename($files['files']['name'][$i]);
            $extension = pathinfo($filename, PATHINFO_EXTENSION);
            $new       = md5($filename.''.time('d-y-m')).'.'.$extension;

            $_FILES['files']['name'] = $new; //$files['files']['name'][$i];
            $_FILES['files']['type'] = $files['files']['type'][$i];
            $_FILES['files']['tmp_name'] = $files['files']['tmp_name'][$i];
            $_FILES['files']['error'] = $files['files']['error'][$i];
            $_FILES['files']['size'] = $files['files']['size'][$i];


            $image = array('upload_data' => $this->upload->data()); 

            $image_name = $_FILES['files']['name'];

            $ip = $this->input->ip_address();

            $this->session->set_userdata("userIP",$ip);
            //$this->session->unset_userdata("userIP");
            $Dval = array(
            "filename" => $image_name,
            "ip"    => $this->input->ip_address()
            );




            $this->member_model->tmp_image($Dval);

            $this->upload->initialize($config);
            if ( $this->upload->do_upload("files")) 
            {

                $errors++;
                $data = $this->upload->data();
                echo json_encode($data['file_name']);

                //code is for thumbnail and watermark on images
                //$this->watermark($data['full_path']);
                //$myPathfT =  $config1['upload_path'] = "./assets/thumbs/".$aDir;
                //mkdir($myPathfT);b  


                $config1 = array();
                $config1['image_library']   =       'gd2'; 
                $config1['source_image']    =        $data['full_path'];
                $config1['new_image']       =       'assets/uploads/thumbs/';
                $config1['create_thumb']    =       false;
                $config1['quality']         =       50;
                $config1['height']          =       150;
                $config1['width']           =       150;

                $this->load->library('image_lib',$config1);
                $this->image_lib->initialize($config1);
                $this->image_lib->resize();
                $this->image_lib->clear();
                }
            }

        if ($errors > 0) 
            {
                //echo  "Data Transferred";
            }

    }
            elseif ($this->input->post('file_to_remove')) 
            {
                 $aDir = $this->session->userdata('Dir');
                 $file_to_remove = $this->input->post('file_to_remove');

                 unlink("./assets/mainFilesData/$aDir/" . $file_to_remove);

                 $array = $this->session->userdata('photo');

                 $dataF = array_diff($array, array($file_to_remove));


                 $this->session->set_userdata('photo',$dataF);
            }
            else 
            {
                 $this->listFiles();
            }

}