使用CodeIgniter无法将图片路径存入数据库——学生注册问题
Hey there! I see you're stuck getting student photos uploaded to the upload folder and their paths saved to the database. Let's break down the issues in your current code and fix them step by step.
Key Issues in Your Current Code
- Incorrect Upload Path: Using
/upload/is an absolute server path that likely doesn't point to your project'suploadfolder (since it sits at the same level asapplication). - No Failure Fallback: If the upload fails, your
$dataarray won't include thephotofield, and you'll get no feedback to debug what went wrong. - Wrong Path Stored:
$fileName['file_path']saves the server's absolute file path, which isn't ideal for database storage—you usually want a relative path to display images later. - Potential Folder Permissions: Your
uploadfolder might lack write permissions, blocking file uploads entirely.
Fixed Controller Code
Here's the revised saveStudent() function with all fixes applied:
public function saveStudent() { // Initialize all non-image fields first so they're always present in the database insert $data = array( 'student_name' => $this->input->post('name'), 'class' => $this->input->post('class'), 'section' => $this->input->post('section'), 'addressline1' => $this->input->post('addressline1'), 'addressline2' => $this->input->post('addressline2'), 'city' => $this->input->post('city'), 'mobile' => $this->input->post('mobile'), 'gender' => $this->input->post('gender'), 'dob' => $this->input->post('dob'), 'religion' => $this->input->post('religion'), 'category' => $this->input->post('category'), 'addmission_date' => $this->input->post('adddate'), 'registrationdate' => $this->input->post('registration'), 'fathername' => $this->input->post('fathername'), 'foccu' => $this->input->post('foccu'), 'fquali' => $this->input->post('fquali'), 'fmobile' => $this->input->post('fmobile'), 'fdob' => $this->input->post('fdob'), 'mothername' => $this->input->post('mothername'), 'moccu' => $this->input->post('moccu'), 'mquali' => $this->input->post('mquali'), 'mmobile' => $this->input->post('mmobile'), 'mdob' => $this->input->post('mdob'), 'lastschool' => $this->input->post('lastschool'), 'lastexam' => $this->input->post('lastexam'), 'lastresult' => $this->input->post('lastresult'), 'lastmark' => $this->input->post('lastmark'), 'board' => $this->input->post('board'), 'adharcard' => $this->input->post('adharcard'), 'TC' => $this->input->post('TC'), 'CC' => $this->input->post('CC'), 'result' => $this->input->post('result'), 'dobc' => $this->input->post('dobc'), 'user_id' => $this->session->userdata('user_id'), 'photo' => NULL // Default to NULL if upload fails ); // Configure upload with correct path using CodeIgniter's FCPATH (points to project root) $config = array( 'upload_path' => FCPATH . 'upload/', 'allowed_types' => 'gif|jpg|png|jpeg', 'overwrite' => FALSE, // Prevent overwriting existing files 'max_size' => 2048, // Optional: Limit to 2MB (adjust as needed) ); $this->load->library('upload', $config); // Attempt file upload if ($this->upload->do_upload('photo')) { $uploadData = $this->upload->data(); // Store relative path (e.g., upload/student_photo.jpg) for easy image display later $data['photo'] = 'upload/' . $uploadData['file_name']; } else { // Debug: Print upload errors (remove this line in production) echo $this->upload->display_errors(); // Optional: Redirect back with a flash error message // $this->session->set_flashdata('upload_error', $this->upload->display_errors()); // redirect('your_controller/add_student'); } // Insert all student data (including photo path if upload succeeded) $this->db->insert('student', $data); // Redirect to a success page or back to the form redirect('your_controller/student_list'); }
Additional Steps to Ensure Success
Set Folder Permissions: Make sure your
uploadfolder has write permissions. On Linux, run:chmod 755 upload/On Windows, right-click the folder > Properties > Security > Allow write access for the server user.
Verify Form Setup: Your HTML form must include
enctype="multipart/form-data"to support file uploads:<form method="post" action="<?php echo base_url('controller/saveStudent'); ?>" enctype="multipart/form-data"> <!-- All your form fields here --> <input type="file" name="photo" /> <button type="submit">Save Student</button> </form>Check Database Field: Ensure your
studenttable'sphotofield is aVARCHARtype with enough length (e.g., 255 characters) to store the file path.Debug Upload Errors: Use the
display_errors()output to pinpoint issues like invalid file types, oversized files, or missing folders.
内容的提问来源于stack exchange,提问作者B. Dontos

