Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Codeigniter同时上传特色图片和多张图片_Php_Codeigniter_File Upload - Fatal编程技术网

Php Codeigniter同时上传特色图片和多张图片

Php Codeigniter同时上传特色图片和多张图片,php,codeigniter,file-upload,Php,Codeigniter,File Upload,我已经修改了代码以使用foreach循环,现在我可以访问文件名,print\r将文件名打印在如下数组中: Array ( [0] => Uconn.png [1] => UW_Medicine.png [2] => Yale.png ) Axis.png 但我仍然得到以下错误: A PHP Error was encountered Severity: Notice Message: Array to string conversion 和数据库错误: Error Nu

我已经修改了代码以使用foreach循环,现在我可以访问文件名,print\r将文件名打印在如下数组中:

Array ( [0] => Uconn.png [1] => UW_Medicine.png [2] => Yale.png ) Axis.png
但我仍然得到以下错误:

A PHP Error was encountered

Severity: Notice

Message: Array to string conversion
和数据库错误:

Error Number: 1054

Unknown column 'Array' in 'field list'

INSERT INTO `yacht_slider` (`yacht_slide_id`, `slide`) VALUES (87, Array)
我只是不知道我应该如何传递模型中的循环文件来上传

我尝试在一个输入中上载一个特色图像,同时在另一个输入中上载多个图像,我尝试了许多方法和方法来实现这一点,但我总是以一个错误结束,主要是数组到字符串的转换错误

特征图像存储在一个数据库表中,多个图像存储在另一个表中

我当前的代码:

HTML:

控制器:

public function create_yacht(){
  $data['title'] = 'Create';
  $data['categories'] = $this->category_model->get_categories();
  $this->form_validation->set_rules('title', 'Title', 'required');
  $this->form_validation->set_rules('city', 'City', 'required');
  if($this->form_validation->run() === FALSE){
    $this->load->view('templates/admin_header');
    $this->load->view('admin/create_yacht', $data);
    $this->load->view('templates/admin_footer');
  }else{
    $config['upload_path'] = './assets/images';
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size'] = '2048';
    $this->load->library('upload', $config);
    $featured = 'featured';
    if (!$this->upload->do_upload($featured)) {
      $errors = array('errors' => $this->upload->display_errors());
      $yacht_img = 'https://via.placeholder.com/1920x1080';
    }else{
      $data = array('upload_data' => $this->upload->data());
      $yacht_img = $_FILES['featured']['name'];
    }
    foreach ($_FILES['userfile']['name'] as $name) {
      $this->upload->initialize($config);
      $this->upload->do_upload($name);
      $data = array('upload_data' => $this->upload->data());
      $slider = $_FILES['userfile']['name'];
    }
    print_r($slider);
    print_r($yacht_img);
    $this->yacht_model->create_yacht($yacht_img, $slider);
    // redirect('admin');
  }
}
public function create_yacht() {
        $data['title'] = 'Create';
        $data['categories'] = $this->category_model->get_categories();
        $this->form_validation->set_rules('title', 'Title', 'required');
        $this->form_validation->set_rules('city', 'City', 'required');
        if ($this->form_validation->run() === FALSE) {
            $this->load->view('templates/admin_header');
            $this->load->view('admin/create_yacht', $data);
            $this->load->view('templates/admin_footer');
        } else {
            $this->load->library('upload');
            $upload_path = './testupload/';
            // just in case, make path if it doesn't exist
            // if we can't die
            if (!is_dir($upload_path) && @mkdir($upload_path, DIR_WRITE_MODE) == false) {
                show_error('Could not make path!');
            }
            $config['upload_path'] = $upload_path;
            $config['allowed_types'] = 'gif|jpg|png';
            $config['max_size'] = '2048';
            $config['file_ext_tolower'] = true;
            //$config['encrypt_name'] = true; // might be a good idea
            $this->upload->initialize($config);
            // featured image
            if (!$this->upload->do_upload('featured')) {
                show_error($this->upload->display_errors());
            }
            $yacht_img = $this->upload->data('file_name');
            // multi images
            $slider_images = array();
            $multi_files = $_FILES['userfile'];
            if (!empty($multi_files['name'][0])) { // if slider images are required remove this if
                $multi_count = count($_FILES['userfile']['name']);
                for ($i = 0; $i < $multi_count; $i++) {
                    $_FILES['userfile']['name'] = $multi_files['name'][$i];
                    $_FILES['userfile']['type'] = $multi_files['type'][$i];
                    $_FILES['userfile']['tmp_name'] = $multi_files['tmp_name'][$i];
                    $_FILES['userfile']['error'] = $multi_files['error'][$i];
                    $_FILES['userfile']['size'] = $multi_files['size'][$i];
                    if (!$this->upload->do_upload()) {
                        // failure cleanup to prevent orphans
                        @unlink($upload_path . $yacht_img);
                        if (count($slider_images) > 0) {
                            foreach ($slider_images as $image) {
                                @unlink($upload_path . $image);
                            }
                        }
                        show_error($this->upload->display_errors());
                    }
                    $slider_images[] = $this->upload->data('file_name');
                }
            }
            $this->yacht_model->create_yacht($yacht_img, $slider_images);
        }
    }

如果您使用的是mySQL 7,那么它支持json数据类型,并且可以另存为数组。若您使用较低版本的MySQL,最好的解决方案是将图像数组转换为JSON格式,然后将其插入表中。 有关MySQL中JSON的更多详细信息,请参考

我对您的代码进行了一些清理,并添加了一些错误报告,这样用户在出现错误时就不会感到困惑

控制器:

public function create_yacht(){
  $data['title'] = 'Create';
  $data['categories'] = $this->category_model->get_categories();
  $this->form_validation->set_rules('title', 'Title', 'required');
  $this->form_validation->set_rules('city', 'City', 'required');
  if($this->form_validation->run() === FALSE){
    $this->load->view('templates/admin_header');
    $this->load->view('admin/create_yacht', $data);
    $this->load->view('templates/admin_footer');
  }else{
    $config['upload_path'] = './assets/images';
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size'] = '2048';
    $this->load->library('upload', $config);
    $featured = 'featured';
    if (!$this->upload->do_upload($featured)) {
      $errors = array('errors' => $this->upload->display_errors());
      $yacht_img = 'https://via.placeholder.com/1920x1080';
    }else{
      $data = array('upload_data' => $this->upload->data());
      $yacht_img = $_FILES['featured']['name'];
    }
    foreach ($_FILES['userfile']['name'] as $name) {
      $this->upload->initialize($config);
      $this->upload->do_upload($name);
      $data = array('upload_data' => $this->upload->data());
      $slider = $_FILES['userfile']['name'];
    }
    print_r($slider);
    print_r($yacht_img);
    $this->yacht_model->create_yacht($yacht_img, $slider);
    // redirect('admin');
  }
}
public function create_yacht() {
        $data['title'] = 'Create';
        $data['categories'] = $this->category_model->get_categories();
        $this->form_validation->set_rules('title', 'Title', 'required');
        $this->form_validation->set_rules('city', 'City', 'required');
        if ($this->form_validation->run() === FALSE) {
            $this->load->view('templates/admin_header');
            $this->load->view('admin/create_yacht', $data);
            $this->load->view('templates/admin_footer');
        } else {
            $this->load->library('upload');
            $upload_path = './testupload/';
            // just in case, make path if it doesn't exist
            // if we can't die
            if (!is_dir($upload_path) && @mkdir($upload_path, DIR_WRITE_MODE) == false) {
                show_error('Could not make path!');
            }
            $config['upload_path'] = $upload_path;
            $config['allowed_types'] = 'gif|jpg|png';
            $config['max_size'] = '2048';
            $config['file_ext_tolower'] = true;
            //$config['encrypt_name'] = true; // might be a good idea
            $this->upload->initialize($config);
            // featured image
            if (!$this->upload->do_upload('featured')) {
                show_error($this->upload->display_errors());
            }
            $yacht_img = $this->upload->data('file_name');
            // multi images
            $slider_images = array();
            $multi_files = $_FILES['userfile'];
            if (!empty($multi_files['name'][0])) { // if slider images are required remove this if
                $multi_count = count($_FILES['userfile']['name']);
                for ($i = 0; $i < $multi_count; $i++) {
                    $_FILES['userfile']['name'] = $multi_files['name'][$i];
                    $_FILES['userfile']['type'] = $multi_files['type'][$i];
                    $_FILES['userfile']['tmp_name'] = $multi_files['tmp_name'][$i];
                    $_FILES['userfile']['error'] = $multi_files['error'][$i];
                    $_FILES['userfile']['size'] = $multi_files['size'][$i];
                    if (!$this->upload->do_upload()) {
                        // failure cleanup to prevent orphans
                        @unlink($upload_path . $yacht_img);
                        if (count($slider_images) > 0) {
                            foreach ($slider_images as $image) {
                                @unlink($upload_path . $image);
                            }
                        }
                        show_error($this->upload->display_errors());
                    }
                    $slider_images[] = $this->upload->data('file_name');
                }
            }
            $this->yacht_model->create_yacht($yacht_img, $slider_images);
        }
    }

可能重复或甚至:唯一的区别是你需要有你的以上代码,然后一个多文件的部分。为此,你需要一个不同的上传字段名。我尝试了这个解决方案,它不适合我,上传一个文件很好,但除了一个文件之外,我还需要上传多个文件
public function create_yacht($yacht_img, $slider_images) {
    $slug = url_title($this->input->post('title'));
    $data = array(
        'title' => $this->input->post('title'),
        'slug' => $slug,
        'img' => $yacht_img,
        'city' => $this->input->post('city'),
        'category' => $this->input->post('category'),
        'price' => $this->input->post('price'),
        'description' => $this->input->post('description')
    );
    $this->db->insert('yachts', $data);
    $insert_id = $this->db->insert_id();
    if (count($slider_images) > 0) {
        foreach ($slider_images as $image) {
            $this->db->insert('yacht_slider', array('yacht_slide_id' => $insert_id, 'slide' => $image));
        }
    }
}