能否在CodeIgniter中将图片名称存入数据库?请求修复存储异常
问题排查与修复方案
我帮你梳理了代码里的关键问题,这就是图片名称无法写入数据库的原因,一步步来修复:
1. 上传配置里的语法&逻辑错误
你初始化上传配置时写了 $config['file_name'] = $data-> 'filename';,这里有两个明显问题:
- 语法错误:
->是对象访问操作符,后面不能直接跟空格加字符串,而且此时$data变量还没定义,完全是无效代码。 - 逻辑错误:如果不需要自定义文件名,这个配置项其实可以直接删掉——毕竟你已经把
encrypt_name设为false,上传类会保留原文件名。如果确实要自定义文件名,得用合法的变量或值(比如表单提交的字段)。
2. 获取文件名的方式错误
上传成功后,你试图用$data-> 'filename';获取文件名,这不仅语法错误,而且完全没拿到上传后的真实文件名。正确的做法是从CodeIgniter上传类返回的data()结果里取file_name字段。
修复后的Controller代码
public function upload_file() { $config['allowed_types'] = '*'; // 移除错误的file_name配置,如需自定义文件名请替换为合法逻辑,比如: // $config['file_name'] = $this->input->post('custom_filename'); $config['upload_path'] = './uploads/Ehi'; $config['encrypt_name'] = false; $this->load->library('upload', $config); if ($this->upload->do_upload('image')) { // 先把上传后的文件数据存到变量,方便后续调用 $upload_data = $this->upload->data(); // 可以打开下面的注释调试,查看上传返回的所有信息 // print_r($upload_data); $this->load->model('ehi_model'); $data = array( 'title' => $this->input->post('title'), 'description' => $this->input->post('description'), 'username' => $this->input->post('username'), 'password' => $this->input->post('password'), 'activedays' => $this->input->post('activedays'), 'filename' => $upload_data['file_name'] // 从上传数据中获取正确的文件名 ); $this->ehi_model->upload_file($data); redirect(base_url()."Ehi/index"); } else { // 注意这里是display_errors()(复数),原代码少了个s print_r($this->upload->display_errors()); } }
额外需要确认的点
- 确保你的数据库表
ehi存在filename字段,建议用VARCHAR(255)类型来存储文件名。 - 如果上传时还是报错,先打开
print_r($upload_data);的注释,确认上传类返回的file_name是否正确。 - 原代码里的
display_error()是拼写错误,应该是display_errors(),这个小错误也会导致你看不到正确的上传报错信息。
内容的提问来源于stack exchange,提问作者Naveen007
相关产品推荐
相关产品推荐

