2016-07-17 55 views
0

您好我試圖登錄屏幕用戶名密碼以及一個多場一年的數據庫名稱選擇笨數據庫選擇在登錄屏幕

,比如我有2015_db,2016_db,基於登錄界面選擇字段

年2017_db 的年份

<?php echo form_open('login',$attributes); ?> 

    <label for="ddlLanguage">English</label> 
    <input type="radio" name="ddlLanguage" id="ddlLanguage" value="eng" checked="checked"> 
    <label for="ddlLanguage">Arabic</label> 
    <input type="radio" name="ddlLanguage" id="radio2" value="ar"> 

    <div class="clearfix"></div> 

    <input type="text" name="txtUsername" value="<?= $this->vAdmin;?>" class="usernameLogin" /> 

    <input type="password" name="txtPassword" value="<?= $this->vPass;?>" class="usernameLogin" /> 

    <select name="year" id="year" > 
     <option value="2015">--2015--</option> 
     <option value="2015">--2016--</option> 
    </select> 

    <label class="label" for="chkSave" > REMEMBERME </label> 
    <input type="checkbox" name="chkSave" value="1" /> 

    <a href="<?php echo base_url('forgotpassword/showlist');?>" class="forgot">FORGOTPASSWORD?</a> 

    <input type="submit" name="button" id="button" value="LOGIN" class="login"> 

</form> 

請幫助我如何在控制器和模型中動態分配數據庫名稱。

這樣

$config['hostname'] = "localhost"; 
$config['username'] = $client_db_username; // you got this from the 'admin' database 
$config['password'] = $client_db_password; // you got this from the 'admin' database 
$config['database'] = $client_db_name; // you got this from the 'admin' database 
$config['dbdriver'] = "mysql"; 
$config['dbprefix'] = ""; 
$config['pconnect'] = FALSE; 
$config['db_debug'] = TRUE; 
$config['cache_on'] = FALSE; 
$config['cachedir'] = ""; 
$config['char_set'] = "utf8"; 
$config['dbcollat'] = "utf8_general_ci"; 

$this->load->database($config); 

了很多表的每個數據庫永遠不會改變的,並且包含相同的信息。

我想有一個主要的應用程序數據庫,其中包含這些信息,包括年份列表和數據庫被稱爲什麼。然後,這個數據庫將用於選擇正確的六年數據庫..

+0

儘量不要使用PHP的echo的一切,只有當它從控制器的數據。除此之外,不需要將index.php包含在你的基礎url中,如果你正確地設置了你的base url,你可以將它完全移除,或者只是讓'base_url()'函數自動包含它。 – killstreet

+0

我編輯了你的問題,使其更具可讀性,我還添加了PHP短標籤來回顯數據。另一個技巧是刪除您添加的任何樣式,除非您的問題與樣式相關。這只是清理了其他人閱讀的代碼。 – killstreet

回答

0

首先你必須配置指定數據庫憑據/ database.php中

$active_group = 'customName'; 
$query_builder = TRUE; 

$db['customName'] = array(
'dsn' => '', 
'hostname' => 'localhost', // your host name 
'username' => '',   //username for the db 
'password' => '',   //password to access db 
'database' => '', 
'dbdriver' => 'mysqli', 
'dbprefix' => '', 
'pconnect' => FALSE, 
'db_debug' => (ENVIRONMENT !== 'production'), 
'cache_on' => FALSE, 
'cachedir' => '', 
'char_set' => 'utf8', 
'dbcollat' => 'utf8_general_ci', 
'swap_pre' => '', 
'encrypt' => FALSE, 
'compress' => FALSE, 
'stricton' => FALSE, 
'failover' => array(), 
'save_queries' => TRUE 
); 

您可以指定多個數據庫憑據這樣>對於活性分貝設置

$active_group = 'customName'; // use 'default' or named one 

要裝入數據庫自動配置/ autoload.php使用此

$autoload['libraries'] = array('database'); 
// now db is available globally 

您也可以加載分貝控制器的構造是這樣的:

public function __construct() 
{ 
    parent::__construct(); 

    $this->load->database(); 

    } 

模型:

public function __construct() { 
    $this->load->database(); 
    } 

連接到多個數據庫

連接到多個數據庫 如果您需要連接到多個數據庫同時你可以這樣做如下:

$DB1 = $this->load->database('group_one', TRUE); 
    $DB2 = $this->load->database('group_two', TRUE); 

注:換的話「group_one」和「group_two」特定的羣組您要連接的名稱(或者您可以按照上面所述傳遞連接值)。

通過將第二個參數設置爲TRUE(布爾值),該函數將返回數據庫對象。

以這種方式連接時,您將使用對象名稱來發出命令,而不是本指南中使用的語法。換句話說,而不是發佈命令:

$this->db->query(); 
    $this->db->result(); 
    etc... 

    You will instead use: 

    $DB1->query(); 
    $DB1->result(); 
    etc... 

注:

你並不需要創建單獨的數據庫配置,如果你只需要在同一連接上使用不同的數據庫。當你需要,你可以切換到不同的數據庫,這樣的:

$this->db->db_select($database2_name); 
+0

這隻會連接到他的默認服務器,並且不允許他連接到另一個服務器。 – killstreet

0

因此,在首先你必須擁有所有這些數據庫在config/database.php文件中預先定義的。它應該看起來像下面的東西

$db['db_2015'] = array(
    'dsn' => '', 
    'hostname' => 'localhost', 
    'username' => 'root', 
    'password' => '', 
    'database' => 'database_name', 
    'dbdriver' => 'mysqli', 
    'dbprefix' => '', 
    'pconnect' => TRUE, 
    'db_debug' => TRUE, 
    'cache_on' => FALSE, 
    'cachedir' => '', 
    'char_set' => 'utf8', 
    'dbcollat' => 'utf8_general_ci', 
    'swap_pre' => '', 
    'encrypt' => FALSE, 
    'compress' => FALSE, 
    'stricton' => FALSE, 
    'failover' => array() 
); 

$db['db_2016'] = array(
    'dsn' => '', 
    'hostname' => 'localhost', 
    'username' => 'root', 
    'password' => '', 
    'database' => 'database_name', 
    'dbdriver' => 'mysqli', 
    'dbprefix' => '', 
    'pconnect' => TRUE, 
    'db_debug' => TRUE, 
    'cache_on' => FALSE, 
    'cachedir' => '', 
    'char_set' => 'utf8', 
    'dbcollat' => 'utf8_general_ci', 
    'swap_pre' => '', 
    'encrypt' => FALSE, 
    'compress' => FALSE, 
    'stricton' => FALSE, 
    'failover' => array() 

);

一旦你填滿了所有的數據庫,你想在控制器中檢查你輸入的內容。

public function getPostLogin() 
{ 
     $this->loginModel->validateLogin($this->input->post());//This will also send the database along to the function where you could catch which database to use. 
} 

裏面你的模型,你可以做這樣的事情:

<?php class loginModel extends CI_model{ 

     public function validateLogin($params) 
     { 
      $this->load->database($params['database']); 
      //After this you can run queries like always. 
      return $this->db->get('users');//just an example! 

     } 

}