You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter中图片路径无法存入数据库问题求助

问题分析与解决办法

Hey,我帮你梳理下代码里导致图片路径无法存入数据库的几个关键问题,咱们一步步来修复:

1. 文件输入框的重复name属性错误

你的View里的文件上传input有两个name属性,这会导致服务器无法正确识别上传的文件字段:

<input name="product_image" type="file" name="fileToUpload" id="fileToUpload">

修复方式:删掉重复的name="fileToUpload",保留name="product_image"——因为你的Controller里do_upload('product_image')指定的就是这个字段名:

<input name="product_image" type="file" id="fileToUpload">

2. 传递给Model的路径错误

你的Controller调用insert_data时,传的是$upload_data['upload_path'],这个值只是上传目录(比如./uploads/),并不是图片文件的完整路径/文件名,所以数据库里存的只是空目录,不是具体的图片路径。

修复方式:应该传递目录+文件名的组合,比如用更适合前端展示的相对路径。修改Controller里的do_upload函数:

else {
    $upload_data = $this->upload->data();
    // 拼接成类似 "uploads/xxx.jpg" 的相对路径,方便后续前端调用
    $image_path = ltrim($config['upload_path'], './') . $upload_data['file_name'];
    $this->Category_model->insert_data($image_path);
}

这里用ltrim去掉开头的./,是为了后续前端展示图片时路径更友好(比如<img src="<?php echo base_url($image_path) ?>">)。

3. Controller逻辑的冗余问题

你的save_product函数在调用do_upload后,不管上传成功与否都会执行set_userdata和add_product,这会导致上传失败时依然弹出“保存成功”的错误提示,体验很差。

优化方式:让do_upload返回上传状态,然后在save_product里判断执行:

private function do_upload(){
    $config['upload_path']='./uploads/';
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size'] = 1000;
    $config['max_width'] = 1024;
    $config['max_height'] = 768;

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

    if ( ! $this->upload->do_upload('product_image')){
        $error = array('error' => $this->upload->display_errors());
        $this->load->view('admin/pages/add_product_form', $error);
        return false; // 返回上传失败状态
    } else {
        $upload_data = $this->upload->data();
        $image_path = ltrim($config['upload_path'], './') . $upload_data['file_name'];
        $this->Category_model->insert_data($image_path);
        return true; // 返回上传成功状态
    }
}

function save_product(){
    if($this->do_upload()){
        $this->session->set_userdata('message','Product saved successfully');
    } else {
        $this->session->set_userdata('message','Failed to save product');
    }
    $this->add_product();
}

4. 补充:其他表单字段的插入(可选)

目前你的Model只插入了product_image和product_status,但表单里还有product_name和product_category没有存入数据库,如果需要的话,可以修改代码把这些字段也加进去:

// Controller里的do_upload修改部分:
else {
    $upload_data = $this->upload->data();
    $image_path = ltrim($config['upload_path'], './') . $upload_data['file_name'];
    // 收集所有表单字段
    $product_data = array(
        'product_name' => $this->input->post('product_name'),
        'product_category' => $this->input->post('product_category'),
        'product_image' => $image_path,
        'product_status' => 1
    );
    $this->Category_model->insert_data($product_data);
}

// Model里的insert_data修改为:
function insert_data($product_data){
    $this->db->insert('tbl_product', $product_data);
}

按上面的步骤修改后,图片路径应该就能正确存入数据库了,测试的时候记得确保./uploads/目录有读写权限哦!

内容的提问来源于stack exchange,提问作者Justice taylor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:42:17