Bonjour,

Débutant sur le Framework CodeIgniter, je réalise actuellement un petit site après avoir suivi le tutoriel de la doc.

Pour le moment, j'arrive à upload l'image dans un dossier "uploads" à la racine de mon application, cependant, je n'arrive pas à l'insérer dans la base de données.

Voici mon Project_Model.php

<?php
class Project_Model extends CI_Model {

    public function __construct()
    {
        $this->load->database();
    }

    public function get_project($slug = FALSE) {
        if ($slug === FALSE)
        {
            $query = $this->db->get('project');
            return $query->result_array();
        }

        $query = $this->db->get_where('project', array('slug' => $slug));
        return $query->row_array();
    }

    public function set_project()
    {
        $this->load->helper('url');

        $slug = url_title($this->input->post('title'), 'dash', TRUE);

        $data = array(
            'title' => $this->input->post('title'),
            'category' => $this->input->post('category'),
            'software' => $this->input->post('software'),
            'slug' => $slug,
            'description' => $this->input->post('description'),
            'image' => $this->input->post('image'),
            'date' => $this->input->post('date'),
            'principal_project' => $this->input->post('principal_project')
        );

        return $this->db->insert('project', $data);
    }

}

Mon Controller Project.php

<?php
class Project extends CI_Controller {

        public function __construct()
        {
                parent::__construct();
                $this->load->model('project_model');
                $this->load->helper('url_helper');
                $this->load->helper('assets');
        }

        public function index()
        {
                $data['project'] = $this->project_model->get_project();
                $data['title'] = 'Project';

                $this->load->view('templates/header', $data);
                $this->load->view('project/index', $data);
                $this->load->view('templates/footer');
        }

        public function view($slug = NULL)
        {
                $data['project_item'] = $this->project_model->get_project($slug);

                if (empty($data['project_item']))
                {
                        show_404();
                }

                $data['title'] = $data['project_item']['title'];

                $this->load->view('templates/header', $data);
                $this->load->view('project/view', $data);
                $this->load->view('templates/footer');
        }

        public function create()
        {
            $this->load->helper('form');
            $this->load->library('form_validation');
            $this->load->model('Project_Model');

            $data['title'] = 'Create a project item';

            $this->form_validation->set_rules('title', 'Title', 'required');
            $this->form_validation->set_rules('category', 'Category', 'required');
            $this->form_validation->set_rules('software', 'Software', 'required');
            $this->form_validation->set_rules('description', 'Description', 'required');

            if ($this->form_validation->run() === FALSE)
            {
                $this->load->view('templates/header', $data);
                $this->load->view('project/create');
                $this->load->view('templates/footer');

            }
            else
            {

                $config['upload_path'] = './uploads/'; //The path where the image will be save
                $config['allowed_types'] = 'gif|jpg|png'; //Images extensions accepted
                $config['max_size'] = '5000'; //The max size of the image in kb's
                $config['max_width']  = '2500'; //The max of the images width in px
                $config['max_height']  = '2500'; //The max of the images height in px
                $config['overwrite'] = TRUE; //If exists an image with the same name it will overwrite. Set to false if don't want to overwrite
                $this->load->library('upload', $config); //Load the upload CI library
                if (!$this->upload->do_upload('image')){
                    $uploadError = array('upload_error' => $this->upload->display_errors());
                    $this->set_flashdata('uploadError', $uploadError, $urlYouWantToReturn); //If for some reason the    upload could not be done, returns the error in a flashdata and redirect to the page you specify in $urlYouWantToReturn
                    exit;
                }

                $this->project_model->set_project();
                $this->load->view('templates/header', $data);
                $this->load->view('project/success');
                $this->load->view('templates/footer', $data);
            }
        }

}

Pour le moment, je n'arrive pas à trouver le code qui permet de récupérer la valeur d'une image afin de l'insérer dans la db, et la plupart des topics parlant de ce sujet que j'ai trouvé, les personnes ne procédaient pas de la même manière (db insert directement dans le controller), ce qui en soit semble plus logique, mais j'ai préféré suivre le tutoriel à la lettre pour ne pas me perdre...

PS : J'en profite également pour poser une question en ce qui concerne l'hébergement. Jusqu'à maintenant j'ai travaillé en local, et j'ai voulu l'héberger sur mon site pour montrer l'avancement à un ami. Cependant, aucun fichier css/js/images/fonts n'est trouvé, je rencontre ce message d'erreur : net::ERR_NAME_NOT_RESOLVED.
EDIT : Apparemment le CSS/JS fonctionne maintenant, j'ai ajouté un fichier Check.php dans les Controller.

Dernier point, aucune route n'est trouvée, que ça soit pour accéder à la page des projets, à la page de création de projet ou à la page contact.. une belle erreur 404. Elles fonctionnent pourtant bien en local.
EDIT 2 : Les routes sont corrigées également, il s'agissait d'un problème dans le .htaccess !

Je vous remercie d'avance !

1 réponse


je comprends pas trop !
tu dois avoir un formulaire d'upload, lorsque tu upload une image, tu geres par la fonction create ??? (seulement je ne vois pas de $_FILES)
En principe tu récupère le nom de ton fichier avec $_FILES['fichier']['name']
donc lors de l'upload tu fais :

$name = $_FILES['fichier']['name'];
$this->project_model->insert($name);

je sais pas trop comment est ta bdd, ni si tu veus insérer ou mettre à jour, mais dans ton model (project_model) tu dois avoir une methode qui gére l'insert ou l'update de ton image.