2015-01-01 72 views
1

所以我很忙于这个新的网站,因为它包括一个登录系统,而且我的设计者根本不知道任何PHP,所以我决定制作一个快速系统供他使用。我的设置功能实际上并没有设置变量

当他需要回显用户数据时,他将该属性放在百分号之间(例如%username%。然后我的类为这些标签过滤文档,并用我给它们的值替换它们。像这样的PHP类:

public static function setUser($key, $value) 
{ 
    self::$user['%' . $key . '%'] = $value; 
} 

正如你所看到的,我称之为一个键和值这个功能,它被保存在一个数组,然后,我打电话parseParams功能,其搜索页面这些标签功能:

private static function parseParams($content) 
{ 
    $userkeys = array_keys(self::$user); 
    $uservalues = array_values(self::$user); 
    self::$output = str_replace($userkeys, $uservalues, $content); 
    return self::$output; 
} 

输出是一个页面,因为我称之为render函数。它在我调用的页面上执行了一个​​,然后该页面变为被解析的$ content变量。当我回应$output变量时,我得到整个页面。

看起来很简单。现在,我的问题是没有设置任何变量。当我调用该函数的一个例子,就是当用户登录这里的登录功能:

public function Login() 
    { 
     $username = $_POST['username']; 
     $password = $_POST['password']; 
     $query = DB::$conn->prepare('SELECT username, password, rank FROM users WHERE username = ?'); 
     $query->bind_param('s', $username); 
     $query->execute(); 
     $query->bind_result($name, $pass, $rank); 
     $query->store_result(); 
     if ($query->num_rows() > 0) 
     { 
      while ($query->fetch()) 
      { 
       if (password_verify($password, $pass)) 
       { 
        TPL::setUser('username', $username); 
        session_start(); 
        define('LOGGEDIN', true); 
        header('Location: me'); 
        exit(); 
       } 
        else 
       { 
        $this->loginMessage[] = '{{wrongpass}}'; 
       } 
      } 
     } 
      else 
     { 
      $this->loginMessage[] = '{{nouser}}'; 
     } 
    } 

我没有在文件的顶部定义TPL类,命名空间的类下设:

use CRF\Template as TPL;

所以,我想这是一个很好的解决方案,并且它的工作,但只要我做var_dump(TPL::$user);我得到一个空数组。

我的错误在哪里?

谢谢。

+0

_Where_你把那个'的var_dump (TPL :: $用户);'? – Federkun

+0

@Laxus我已经把它放在索引文件中,一切都在一起 –

+2

你知道php是无状态的,对吗? 'TPL :: setUser('username',$ username);'你在Login()函数中拥有的永远不会被parseParams()解析。 – Federkun

回答

2
TPL::setUser('username', $username); 
session_start(); 
$_SESSION['tpl_user']=serialize(self::$user); 
define('LOGGEDIN', true);//btw this also won't be saved for the next script 
header('Location: me'); 
exit(); 

您无法将变量从一页传递到另一页。但你可以在记录它们存储在$ _SESSION变种,像这样的文件:

TPL::setUser('username', $username); 
session_start(); 
$_SESSION['tpl_user']=serialize(self::$user); 
define('LOGGEDIN', true);//btw this also won't be saved for the next script 
header('Location: me'); 
exit(); 

,这在文件中使用该数组:

private static function parseParams($content) 
{ 
    if(isset($_SESSION['tpl_user'])&&!empty($_SESSION['tpl_user'])) //session_start() should be called before that code 
    { 
    self::$user = unserialize($_SESSION['tpl_user']); 
    $userkeys = array_keys(self::$user); 
    $uservalues = array_values(self::$user); 
    self::$output = str_replace($userkeys, $uservalues, $content); 
    return self::$output; 
    } else {println("Access fobidden"); exit;} 
}