2

私は、CI の問題で困難な場所と岩の間にいます。ユーザーが入力したユーザー名とパスワードを使用して、DB に動的に接続する必要があります。これらは、Oracle のユーザー名とパスワードです。そのため、その情報を使用して DB に接続し、アプリケーション内のさまざまなモデルとコントローラーに対応できるようにしておく必要があります。

ログインコントローラーとログインビューがあります。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

4

1 に答える 1

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.
于 2011-07-25T19:16:25.733 に答える