我介于一个困难的地方和一个有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');.....
非常感谢您提供的任何帮助。
此致 V
答案 0 :(得分: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.