2

我在一个困难的地方和一个有 CI 问题的石头之间。我必须使用用户输入的用户名和密码动态连接到数据库。这些是他们的 oracle 用户名和密码。因此,有了这些信息,我必须连接到数据库,然后为应用程序中的不同模型和控制器保留它。

我有一个登录控制器和一个登录视图。我已经从 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');.....

您能提供的任何帮助将不胜感激。

问候,五

4

1 回答 1

0

在上面的上下文中$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.
于 2011-07-25T19:16:25.733 回答