2013-10-03 321 views
0

我试图根据谁登录到网页中动态设置数据库连接凭证。我很确定它不工作,因为$connectdb变量没有被定义。有人可以看看我的代码,并试图让它工作吗?谢谢!PHP - 全局变量

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

$connectdb=""; 
class Main extends CI_Controller { 
    function __construct() { 
     parent::__construct(); 

     echo $connectdb; 
     $this->load->database($connectdb); 
     $this->load->helper('url'); 
     $this->load->library('grocery_CRUD'); 
    } 

    public function index() { 
     if ($_POST["username"] == "root") { 
      global $connectdb="default"; 
     } 

     if ($_POST["username"] == "user1") { 
      global $connectdb="user1"; 
     } 

     if ($_POST["username"] == "user2") { 
      global $connectdb="user2"; 
     } 

     $connect = @mysql_connect("localhost", $_POST["username"],  $_POST["password"]);//won't display the warning if any. 
     if (!$connect) { 
      echo 'Server error. Please try again sometime. CON'; 
     } else { 
      print("<a href=\"http://v-admindb/ci/index.php /main/employees?username=".$_POST["username"]."\">Employees</a>"); 
      echo "<br>"; 
      print("<a href=\"http://v-admindb/ci/index.php/main/visitors?username=".$_POST["username"]."\">Visitors</a>"); 
     }//Just an example to ensure that we get into the function 
    // LOAD LIBRARIES 
    } 

    public function employees() { 
     $this->grocery_crud->set_table('employees'); 
     $output = $this->grocery_crud->render(); 
     $this->_example_output($output); 
    } 

    public function visitors() { 
     $this->grocery_crud->set_table('visitors'); 
     $output = $this->grocery_crud->render(); 
     $this->_example_output($output); 
    } 

    function _example_output($output = null) { 
     $this->load->view('our_template.php',$output); 
    } 
} 

回答

1

THE MANUAL快速阅读会告诉你这是很容易有多个数据库连接。您可以在database.php配置文件中定义连接参数,然后使用组名称调用数据库。

if($user == 'someguise'){ 
    $this->load->database('guiseDB'); 
} 

HTH

+0

这不会令人遗憾。我需要做的是根据登录屏幕上的用户名(使用$ _POST [“username”])设置一个名为$ connectdb的变量,然后使用$ this-> load-> database($ connectdb)我试着列出多个if语句在构造函数内但它不起作用。 – user2839568

+0

我现在在你的代码中看到你可能正在使用[grocery crud](http://www.grocerycrud.com)。我继续前进,花8秒钟为您搜索[google](https://www.google.com/search?q=grocery+crud+multiple+databases):http://www.grocerycrud.com/forums /主题/ 420-回答灿我交换机的数据库/ – stormdrain

1

对于因为这样,我会强烈建议运行通过CI表单验证第一形式输入重要的事情。你真的应该验证和做一些事情,比如限制字符的数量,确保它只有字母,修整空白和XSS清理 - 所有这些都是在你做其他事情之前完成的。 (这有助于你的用户也一样)

然后从表单中获得的价值 - 做这样的事

$username = $this->input->post('username', TRUE) ; 

,并与一个变量$用户名工作。在TRUE XSS清洁值,然后代替一遍又一遍地重复

$_POST["username"] == 

,并且,你只是检查$的用户名。也使代码更易于阅读。如果你需要在不同的方法$的用户名就用:

$this->username = $this->input->post('username', TRUE) ; 

,然后$这个 - >用户名将会在类中的任何方法工作。

终于考虑有一个用户或配置列表 - 然后使用不同的值来调用您的数据库。换句话说,也许他们使用用户名登录:“root”,但随后使用不同的名称,例如全局$ connectdb =“rootadmin”