2011-07-25 2 views
2

Je suis entre un endroit difficile et un rocher avec un problème de CI. Je dois me connecter dynamiquement à une base de données avec le nom d'utilisateur et le mot de passe que les utilisateurs tapent. Ce sont leurs noms d'utilisateur oracle et mots de passe. Donc, avec cette information, je dois faire la connexion à la base de données et ensuite garder l'alibe pour les différents modèles et contrôleurs au sein de l'application.CodeIgniter problème de connexion à la base de données manuelle - utilisation

J'ai un contrôleur de connexion et une vue de connexion. J'ai désactivé le chargement automatique de la base de données à partir des fichiers database.php et config.php.

Ensuite, le contrôleur de login.php ressemble à ceci:

class Login extends CI_Controller { 

public function index() 
{ 
    $this->output->enable_profiler(TRUE); 

    if (isset($_POST['ingresar'])){ 

     $db['hostname'] = 'myhost'; 
     $db['username'] = $_POST['usr']; 
     $db['password'] = $_POST['pwd']; 

     $db['database'] = 'DBname'; 
     $db['dbdriver'] = 'oci8'; 
     $db['dbprefix'] = ''; 
     $db['pconnect'] = FALSE; 
     $db['db_debug'] = FALSE; 
     $db['cache_on'] = FALSE; 
     $db['cachedir'] = ''; 
     $db['char_set'] = 'WE8ISO8859P1'; 
     $db['dbcollat'] = ''; 
     $db['swap_pre'] = ''; 
     $db['autoinit'] = TRUE; 
     $db['stricton'] = FALSE; 



     $db['DB'] = $this->load->database($_SESSION, TRUE); 

     redirect('contactos', 'location'); 
    } 
    else{ 
     $this->load->view('/componentes/header'); 
     $this->load->view('/componentes/menu_sin_login'); 
     $this->load->view('/login/login'); 
     $this->load->view('/componentes/footer'); 
    }  
} 

Lorsque le contrôleur redirige vers l'autre contrôleur « contactos » tout se bloque parce qu'il ne reconnaît pas une connexion de base de données, sur la ligne 5, lorsque essayer de charger un modèle.

class Contactos extends CI_Controller { 
public function __construct() 
{ 
    parent::__construct(); 
    $this->load->model('Contactos_model'); 
    $this->load->model('Componentes_model');..... 

Toute aide que vous pourriez fournir serait vraiment appréciée.

Cordialement, V

Répondre

0

Dans le contexte ci-dessus $db est une variable locale, ce qui signifie qu'il n'a pas vraiment faire quoi que ce soit sur le contexte plus large du script, et vous ne stockez pas partout qu'il pourrait être réutilisé.

Pour charger le DB, vous voulez probablement appeler:

// you may want to think about using an encrypted CI session instead? 
$_SESSION['DB'] = $db; 

puis, dans contactos, vous voulez:

class Contactos extends CI_Controller { 
public function __construct() 
{ 
    parent::__construct(); 
    $this->load->database($_SESSION['DB']); 
    // continue as above. 
+0

Bonjour à nouveau! Merci pour l'aide, mais je suis encore assez perdu et ne peux pas faire ce travail. J'ai changé le code comme suit: /views/login/login.php ajouté l'entrée correspondante pour taper le nom d'utilisateur et mot de passe. C'est envoyer des informations de poste ok. /controllers/login.php classe {Connexion étend CI_Controller fonction publique __construct() { \t \t parent \t :: __ construct(); \t \t $ this-> output-> enable_profiler (TRUE); } – Veronica

+0

écarter le précédent une fois ... voici le commentaire correct: Salut là-bas ... je utilise votre suggestion, mais je ne peux pas le faire fonctionner. Une fois que je charge l'objet dans la variable de session, le modèle ne le lit pas. Partie de la sortie print_r() ... => [DB] => CI_DB_oci8_driver Objet mais $ this-> load-> database ($ _ SESSION ['DB'], TRUE); \t $ query = $ this -> $ _ SESSION ['DB'] -> requête ('ALTER SESSION SET nls_sort = \' ESPAGNOL \ ''); dans le modèle donne une erreur. Toute idée ??? Un grand merci pour l'aide. – Veronica

Questions connexes