【问题标题】:my image not uploading into database in codeigniter [duplicate]我的图片没有上传到codeigniter中的数据库[重复]
【发布时间】:2018-07-05 10:33:20
【问题描述】:

我正在从我的表单上传四张图片,但图片没有上传。我在下面粘贴了我的代码。请纠正我在哪里做错了。首先我进行了验证,然后我配置了和路径。后来我加载了上传库,后来给了每张图片的图片路径。

我的控制器代码

public function upro()
    {       
        $this->form_validation->set_rules('pro_name','Product','required');
        $this->form_validation->set_rules('pro_image1','Image1','required');
        $this->form_validation->set_rules('pro_image2','Image2','required');
        $this->form_validation->set_rules('pro_image3','Image3','required');
        $this->form_validation->set_rules('pro_image4','Image4','required');
        // $today = date('Y-m-d');


        if($this->form_validation->run()){
            function uploadPic()
        {
            $config=[
                'upload_path' => './uploads',
                'allowed_types' => 'jpg|gif|png|jpeg'
            ];
            $this->load->library('upload',$config);
        }
            $data = $this->input->post();
            $today = date('Y-m-d');
            $data['pro_date'] = $today;
            $info = $this->upload->data();
            $image_path = base_url("uploads/".$info['raw_name'].$info['file_ext']);
            $data['pro_image1'] = $image_path;
            $data['pro_image2'] = $image_path;
            $data['pro_image3'] = $image_path;
            $data['pro_image4'] = $image_path;
            unset($data['submit']);
            $this->adata->uproQ($data);
            $this->session->set_flashdata('msg','Product uplaod success');
            return redirect('admin/products');

        }else{
            $this->session->set_flashdata('msg','product uplaod failed');
            return redirect('admin/apro');
        }
    }

我的模型代码

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

我的表单查看代码

<?php echo form_open_multipart('admin/upro');?>
<label><h5>product Name:*</h5></label>
<?php echo form_input(['name'=>'pro_name','class'=>'form-control','placeholder'=>'product Name Here','value'=>set_value('pro_name')]);?>
<?php echo form_upload(['name'=>'pro_image1']);?>
<label><h5>product Image2:*</h5></label>
<?php echo form_upload(['name'=>'pro_image2']);?>
<label><h5>product Image3:*</h5></label>
<?php echo form_upload(['name'=>'pro_image3']);?>
<label><h5>product Image4:*</h5></label>
<?php echo form_upload(['name'=>'pro_image4']);?>
<button type="reset" class="btn btn-warning">Reset</button> <button type="submit" class="btn btn-primary">Submit</button><hr>
<?php form_close();?>

【问题讨论】:

  • 不好的做法是将图片保存到数据库,它会减慢您的查询速度,我建议您直接将文件保存到相应的文件夹中,并在获取图片网址时,只需检查文件是否存在
  • 这是什么$this-&gt;adata-&gt;uproQ($data);,哦是另一个文件中的uproQ,刚刚看到评论//my model Code,有点不清楚。我建议用实际文本中的 cmets 为问题做单独的代码块。
  • 我将所有这些表单数据传递到我的模型函数 uproQ($data)
  • 对,我只是重新格式化了你的问题,希望你不介意。以这种方式“一目了然”阅读它会更干净一开始我以为它是同一个文件,我就像
  • 兄弟,如果您知道正确的上传方式,请告诉我此代码上传图片的修改

标签: php codeigniter


【解决方案1】:

除了方法内部的方法,除了从不调用$this-&gt;upload-&gt;do_upload('name_of_input'),上传类一次只能上传一张图片,你需要一个for循环来为你的文件数组。此外,您不能对图像上传使用表单验证,表单验证仅适用于 $_post 字段而不适用于 $_files 字段。我很惊讶这并没有给你一个字段不存在的错误。

$this->load->library('form_validation');
$this->form_validation->set_rules('pro_name', 'Product', 'required');
$expected_files = array('pro_image1', 'pro_image2', 'pro_image3', 'pro_image4');
//https://stackoverflow.com/questions/12289225/codeigniter-file-upload-required-validation
$i = 1;
foreach ($expected_files as $field_name) {
    if (empty($_FILES[$field_name]['name'])) {
        $this->form_validation->set_rules($field_name, 'Image' . $i, 'required');
    }
    $i++;
}
if ($this->form_validation->run()) {
    $config = [
        'upload_path' => './uploads',
        'allowed_types' => 'jpg|gif|png|jpeg',
    ];
    $this->load->library('upload', $config);
    $data = array();
    foreach ($_FILES as $field_name => $field_values) {
        if (!in_array($field_name, $expected_files)) {
            continue; // just in case user tries to add more upload fields
        }
        $this->upload->do_upload($field_name);
        $info = $this->upload->data();
        $image_path = base_url("uploads/" . $info['raw_name'] . $info['file_ext']);
        $data[$field_name] = $image_path;
    }
    $today = date('Y-m-d');
    $data['pro_date'] = $today;
    $data['pro_name'] = $this->input->post('pro_name');
    $this->adata->uproQ($data);
    $this->session->set_flashdata('msg', 'Product upload success!');
    return redirect('admin/products');
} else {
    $this->session->set_flashdata('msg', validation_errors());
    return redirect('admin/apro');
}

【讨论】:

  • 亲爱的 alex,它处理了上传到上传文件夹的文件,但图像名称未插入数据库字段。所以文件无法获取,因为它在数据库中没有图像名称。我该如何解决这个问题
  • 它应该工作 $data[$field_name] = $image_path; 等于 $data['pro_image1'] = $image_path; 你能在 $this-&gt;adata-&gt;uproQ($data); 之前 print_r($data) 吗?
  • Array ( [pro_name] => 女孩的黑色裙子 [pro_cat] => 裙子 [pro_pa_cat] => 女性 [pro_desc] => Lorem Ipsum 只是印刷和排版行业的虚拟文本。er包括 Lorem Ipsum 的版本。[pro_color] => black [pro_cost] => 655 [pro_brand] => american eagle [pro_date] => 2018-01-27)
  • 我的猜测是您正在用更多数据覆盖数组,因为您在打印机中发布了不在问题中的数据,我怀疑您是如何添加它的。我的逻辑是合理的,我再次检查了它。如果文件正在上传,则应使用图像数据填充数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-17
  • 1970-01-01
  • 2016-08-03
  • 1970-01-01
  • 2013-06-28
相关资源
最近更新 更多