2011-07-25 56 views
2

我在一個困難的地方和一個CI問題的岩石之間。我必須使用用戶輸入的用戶名和密碼動態連接到數據庫。這些是他們的oracle用戶名和密碼。因此,有了這些信息,我必須與數據庫建立連接,然後在應用程序中保持不同的模型和控制器。CodeIgniter手動數據庫連接問題 - 用法

我有一個登錄控制器和一個登錄視圖。我已經從database.php和config.php文件中禁用了數據庫自動加載。

然後,控制器的login.php看起來是這樣的:

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'); 
    }  
} 

當控制器重定向到另一個控制器「contactos」一切都崩潰,因爲它不承認一個數據庫連接,在第5行的時候,試圖加載模型。

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

任何幫助,你可以提供將非常感激。

問候, V

回答

0

在上面$db的背景下是一個局部變量,這意味着它並沒有真正做任何有關該腳本的大背景下,你也不會存儲任何地方,它可能被重新使用。

要加載的DB,你可能想打電話:

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

然後,在contactos,你會想:

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

又見面了! 感謝您的幫助,但我仍然很迷茫,無法完成這項工作。 我改變了代碼如下: /views/login/login.php添加了輸入用戶名和密碼的相應輸入。這是發送郵件信息好。 /controllers/login.php 類登錄延伸是CI_Controller { 公共函數__construct() \t { \t \t父:: __構建體(); \t \t $ this-> output-> enable_profiler(TRUE); } – Veronica

+0

解僱前一個請求...在這裏它是正確的評論: 嗨那裏...我用你的建議,但不能使它的工作。一旦我在會話變量中加載對象,模型就不會讀取它。部分print_r()輸出... => [DB] => CI_DB_oci8_driver對象 但$ this-> load-> database($ _ SESSION ['DB'],TRUE); \t $ query = $ this - > $ _ SESSION ['DB'] - > query('ALTER SESSION SET nls_sort = \'SPANISH \''); 在模型中出現錯誤。任何線索? 非常感謝您的幫助。 – Veronica