PHP - 全局变量

时间:2013-10-03 16:51:14

标签: codeigniter

我正在尝试根据谁登录到网页来动态设置数据库连接凭据。由于未定义$connectdb变量,我很确定它不起作用。有人可以查看我的代码,并尝试让它工作?谢谢!

<?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);
    }
}

2 个答案:

答案 0 :(得分:1)

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

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

HTH

答案 1 :(得分:1)

对于像这样重要的东西,我强烈建议首先通过CI表单验证运行表单输入。你真的应该验证并做一些事情,比如限制字符数量,确保它只是字母,修剪空格和XSS清理 - 所有这些都在你做其他事情之前。 (这也有助于您的用户)

然后从表单中获取值 - 执行类似这样的操作

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

并使用一个变量$ username。 TRUE XSS清除值,然后重复

$_POST["username"] == 

一遍又一遍,你只是检查$ username。也使代码更容易阅读。如果您需要使用不同方法的$ username,请使用:

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

然后$ this-&gt;用户名将适用于该类中的任何方法。

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