Bonjour,

Je suis entrain de réaliser un site avec Codeigniter. Jusqu'ici tout se passait bien mais j'ai un problème.

Mon problème est le suivant : je créer un site comportant 3 parties (public, privé, administration). Les 3 parties ont leurs propres URLs (public : mondomaine.fr ; privé : user.mondomaine.fr ; administration : admin.mondomaine.fr). Le controleur qui traite la connexion contient ceci :

<?php
    class Login extends CI_Controller
    {
        public function __construct()
        {
            parent::__construct();
            $this->load->library('session');
            $this->load->model('user_model');
        }

        public function index()
        {
            $this->load->library('form_validation');

            $this->form_validation->set_rules('callsign', 'Indicatif', 'trim|required');
            $this->form_validation->set_rules('password', 'Mot de passe', 'trim|required|callback_check_database');

            if($this->form_validation->run() == FALSE)
            {
                redirect(PUBLIC_URL, 'refresh');
            }else{
                redirect(PILOT_URL, 'refresh');
            }

        }

        function check_database($password)
        {
            $callsign = $this->input->post('callsign');

            $result = $this->user_model->login($callsign, $password);

            if($result)
            {
                $sess_array = array();

                foreach($result as $row)
                {
                    $sess_array = array('id'         => $row->id,
                                        'callsign'   => $row->callsign,
                                        'status'     => 'logged_in'
                                    );
                    $this->session->set_userdata($sess_array);
                }

                return true;
            }else{
                $this->form_validation->set_message('check_database', 'Invalid callsign or password');
                return false;
            }
        }
    }
?>

Et tous mes controleurs ont une condition de type :

<?php
    if($this->session->userdata('status') == 'logged_in')
    {
        // Le controleur fait son boulot
    }else{
        // Il redirige l'utilisateur vers la partie public ou privée en fonction d'où l'utilisateur veut forcer l'accès
    }
 ?>

Le problème c'est que j'ai une boucle de redirection qui est me bloque mais je ne voit pas ce qui ne va pas.

Autre chose : quand je debug la variable superglobale des sessions j'ai ceci :

Array ( [__ci_last_regenerate] => 1433496391 )

Merci d'avance :)

3 réponses


Alexandre #lbac
Réponse acceptée

Pourquoi tu traites ton résultat (dans check_database) avec un foreach ?

Normalement tu ne devrais pas avoir un tableau multidimensionnel.

Gofast77
Auteur

Enfaite le fait de mettre unboucle "for" à la place de la boucle "foreach" ne change rien au problème...

C'est normal, tu ne dois pas faire de boucle du tout...

Que te retourne la fonction login de ton modèle User ?