代码之家  ›  专栏  ›  技术社区  ›  Ahmad Tahhan

编码器点火器同时上传特征图像和多个图像

  •  0
  • Ahmad Tahhan  · 技术社区  · 7 年前

    我已经修改了代码以使用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:

    <div class="form-group">
              <label for="" class="control-label">Image</label>
              <input type="file" class="form-control" name="featured">
            </div>
            <div class="form-group">
              <label for="" class="control-label">Slider</label>
              <input type="file" class="form-control" name="userfile[]" multiple>
            </div>
    

    模型:

    public function create_yacht($yacht_img, $slider){
      $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();
      $data_4 = array(
        'yacht_slide_id' => $insert_id,
        'slide' => $slider
      );
      $this->db->insert('yacht_slider', $data_4);
    }
    

    控制器:

    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');
      }
    }
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Alex    7 年前

    我已经清理了您的代码,并添加了一些错误报告,这样在发生错误时用户就不会感到困惑。

    控制器:

    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));
            }
        }
    }
    
        2
  •  0
  •   prasanna puttaswamy    7 年前

    如果您使用的是MySQL7,那么它支持JSON数据类型,您可以另存为数组。如果您使用较低版本的MySQLbest解决方案是将图像数组转换为JSON格式,那么将其插入到表中。 有关MySQL中JSON的更多详细信息,请参阅 https://dev.mysql.com/doc/refman/8.0/en/json.html#json-values

    推荐文章