当用户登录时

时间:2018-07-26 10:50:21

标签: php database class architecture static

我正在使用一个Web应用程序,该应用程序每次打开且用户未登录时-默认设置应设置为连接到数据库:maindb,无论何时用户登录,用户都应断开连接从maindb数据库中获取并连接到他的“自己的”数据库。

我尝试使用if语句在会话中检查保存的customer_hostcustomer,但是PHP不允许我在类变量中执行此类操作。

我的问题是:

  1. 我如何创建这样的功能,即配置变量可以根据会话是否存在进行设置。 (使用对静态变量offcourse的调用)

  2. 我的情况是否可以使用这种结构/体系结构(“好的做法”)?

    class Config {

    # Website main URL
    const WEB_URL           = 'https://potato.com/';
    
    # Username 
    const DB_USERNAME       = 'potato';
    
    # Password 
    const DB_PASSWORD       = 'disismyrealpassword';
    
    # Set the DB servrer 
    static $DB_HOST         = (Session::exists('customer_host')) ? Session::get('customer_host') : '127.0.0.1';
    
    # Set DB name 
    static $DB_NAME         = (Session::exists('customer')) ? Session::get('customer') : 'maindb';
    
    # Sessopm name
    static $session_name    = 'user'; 
    
    # token name
    static $token_name      = 'token'; 
    

PS:我不是一个决定为每个客户创建不同数据库的人,因此我无法在当前职位上更改该数据库,所以请..尝试着重解决 this 问题,而不是关注为什么我为每个用户有一个不同的数据库。

这是我的数据库类的一部分:

private $host;

private $user;

private $password;

private $dbname;



/*************/
/*  METHODS  */
/*************/


/**
 *   Get Database instance
 *
 */
public static function getInstance()
{
    if (!isset(self::$instance)) 
        self::$instance = new Database();

    return self::$instance;
}


/**
 *   Default Constructor 
 *
 *  1. Instantiate Log class.
 *  2. Creates the parameter array.
 */
private function __construct()
{
    // Load defaults
    $this->loadDefaults();

    // INIT VARIABLES
    $this->parameters = array();                                                   

    // Connect with global vars.
    $this->Connect($this->host, $this->user, $this->password, $this->dbname);
}


/**
*
*  Method to load the object with the defaut settings
*
*/
private function loadDefaults() {
    $this->user     = Config::DB_USERNAME;
    $this->password = Config::DB_PASSWORD;
    $this->host     = Config::$DB_HOST;
    $this->dbname   = Config::$DB_NAME;
}

如果您建议添加其他内容,请询问,我将进行编辑。

1 个答案:

答案 0 :(得分:1)

在配置类中

注意:登录后,请重定向到其他页面

class Config {
  static $DB_NAME_BEFORE_LOGIN         = 'maindb';
  static $DB_NAME_AFTER_LOGIN         = 'own';
  public static get_database(){
    if(logged_in){
      ///do you logic and return the database name
       self::$DB_NAME_AFTER_LOGIN;
    }else{
      //do your logic and return the database name
       self::$DB_NAME_BEFORE_LOGIN;
    }
  }
}

在您的功能中

private function loadDefaults() {
    $this->user     = Config::DB_USERNAME;
    $this->password = Config::DB_PASSWORD;
    $this->host     = Config::$DB_HOST;
    $this->dbname   = Config::get_database();
}