2013-03-28 16 views
7

io sono un novizio Codeigniter e sto cercando di ottenere il nome del file di un'immagine caricata in modo che io possa salvarlo nel database. Ho due modelli, homemodel si occupa del mio database e l'image_upload_model si occupa del caricamento delle immagini. Tutto funziona bene, tranne io non so come per pubblicare il nome del file immagine al databaseCodeigniter: come ottenere un nome file di un file

image_upload_model.php

<?php 

class Image_upload_model extends CI_Model { 

    var $image_path; 

    //constructor containing the image path 
    function Image_upload_model() { 

     $this->image_path = realpath(APPPATH.'../assets/img'); 
    } 

    //uploading the file 
    function do_upload() { 

     $config = array(
      'allowed_types' => 'jpg|jpeg|gif|png', 
      'upload_path' => $this->image_path 
     ); 
     $this->load->library('upload',$config); 
     $this->upload->do_upload(); 
    } 
} 
?> 

homemodel.php

<?php 

class homeModel extends CI_Model { 

    //inserting into the table tenants 
    function addTenants() { 

     $this->load->model('Image_upload_model'); 

     $data = array(
      'Fname' => $this->input->post('Fname'), 
      'Lname' => $this->input->post('Lname'), 
      'contact' => $this->input->post('contact'), 
      'email' => $this->input->post('email'), 
      'location' => $this->input->post('location'), 
      'img_url' => " "//the filename of the image should go here 
     ); 

     $this->db->insert('tenants', $data); 
    } 
} 
?> 

Il controller
homecontroller.php

<?php 

class HomeController extends CI_Controller { 

    public function index() { 

     $this->load->helper('form'); 
     $this->load->helper('html'); 
     $this->load->model('homemodel'); 
     $this->load->model('Image_upload_model'); 

     if ($this->input->post('submit') == 'Submit') { 

      $this->homemodel->addTenants(); 
      echo 'inserted'; 
      $this->Image_upload_model->do_upload(); 
      echo 'image uploaded'; 
     } 
     $this->load->view('index.php'); 
    } 
} 
?> 

qualsiasi aiuto è apprezzato, grazie!

+0

Hai controllato [File di classe Updloading] (http://ellislab.com/codeigniter/user-guide/libraries/file_uploading.html)? Gestisce praticamente il caricamento dei file. –

risposta

17

È possibile ottenere il nome del file come questo

$upload_data = $this->upload->data(); 
    $file_name = $upload_data['file_name']; 
+0

grazie per questo. –

2

Su un livello molto alto, è necessario ristrutturare il codice come segue:

(1) Nella tua HomeController, caricare la prima immagine ($this->Image_upload_model->do_upload() e quindi aggiornare il database ($this->homemodel->addTenants()

(2) Nel modello di caricamento, è necessario richiamare $this->upload->data() per ottenere l'array di informazioni che contiene il nome del file (consultare la documentazione di CodeIgniter). È quindi necessario ottenere il nome del file e renderlo disponibile a HomeController e passarlo alla funzione addTenants.

Con questa guida, dovresti essere in grado di modificare il tuo codice di conseguenza.

2

Facile da raggiungere nome di file con $this->upload->file_name

sulla base di upload funzione nel system/library/upload.php

public $file_name    = ""; 
public function data() 
{ 
    return array (
        'file_name'   => $this->file_name, 
        'file_type'   => $this->file_type, 
        ... 
       ); 
} 
Problemi correlati