2013-10-03 5 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'); 
} 

НТН

+0

Это не сработает. Что мне нужно сделать, это установить переменную с именем $ connectdb на основе имени пользователя на экране входа в систему (используя $ _POST ["username"]), затем используйте $ this-> load-> database ($ connectdb). Я попробовал перечислить несколько операторов if внутри конструктора, но это не сработало. – user2839568

+0

Теперь я вижу в вашем коде вы можете использовать [grokery crud] (http://www.grocerycrud.com). Я пошел вперед и взял 8 секунд для поиска [google] (https://www.google.com/search?q=grocery+crud+multiple+databases) для вас: http://www.grocerycrud.com/forums/тема/420-отвеченные-кан-I-выключатели-базы данных / – stormdrain

1

Для чего-то, как важно, как это я бы настоятельно рекомендуем запустить форму ввода через CI формы проверки первого. Вы действительно должны проверять и делать такие вещи, как ограничение количества символов, убедитесь, что его буквы только, обрезать пробелы и очистку XSS - все, прежде чем делать что-либо еще. (Это помогает вашему пользователю, а)

затем, чтобы получить значение из формы - сделать что-то вроде этого

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

и работать с одной переменным $ имени пользователя. ИСТИНА XSS очищает значение, а затем вместо того чтобы повторять

$_POST["username"] == 

снова и снова и снова, вы просто проверка $ имя пользователя. также упрощает чтение кода. если вам нужно $ имя пользователя в различных методах просто использовать:

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

, а затем $ this-> имя пользователя будет работать в любом методе в классе.

, наконец, рассмотрим наличие таблицы пользователей или списка конфигурации - и затем используйте другое значение для вызова вашей базы данных. другими словами, возможно, они входят в систему с именем пользователя: «root», но тогда это другое имя, например global $ connectdb = «rootadmin»

Смежные вопросы