开发者

CodeIgniter manual database connection problem - usage

I'm between a hard place and a rock with a CI problem. I have to dynamically connect to a DB with the username and password that users type. Those are their oracle usernames and passwords. So, with that information I have to do the connection to the DB and then keep it alibe for the different models and controllers within the application.

I have a login controller and a login view. I've disabled the database autoload from the database.php and config.php files.

Then, the login.php controller looks like this:

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[开发者_StackOverflow中文版'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');
    }       
}

When the controller redirects to the other controller "contactos" everything crashes because it doesn't recognize a database connection, on line 5, when trying to load a model.

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

Any help you can provide would be really appreciated.

Regards, V


In the context above $db is a local variable, which means it doesn't really do anything about the broader context of the script, and you're not storing it anywhere that it could be re-used.

To load the DB, you probably want to call:

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

then, in contactos, you would want:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜