2014-07-11 33 views
0

这是一个类中的功能和它的作品分裂一个类中的功能

public function login($username,$password){ 

     $hashed = $this->get_user_hash($username); 

     try { 
      $stmt = $this->_db->prepare('SELECT username FROM members WHERE password = :password AND active="Yes" '); 
      $stmt->execute(array('password' => $hashed)); 
      $row = $stmt->fetch(); 
      $_SESSION["uname"] = $row['username']; 
     } 
     catch(PDOException $e) { 
      echo '<p class="bg-danger">'.$e->getMessage().'</p>'; 
     } 

     if($this->password_verify($password,$hashed) == 1){ 
      $_SESSION['loggedin'] = true; 
      return true; 
     } 
    } 

现在,我想上面的代码分离成两个功能

public function login($username,$password){ 

    $hashed = $this->get_user_hash($username); 

    if($this->password_verify($password,$hashed) == 1){ 
     $_SESSION['loggedin'] = true; // this works 
     return true; 
    } 
} 

上面的代码也适用,但在波纹管部分我无法得到的值$_SESSION["uname"]

public function get_uname(){ 

     $hashed = $this->get_user_hash($username); 

     try { 
      $stmt = $this->_db->prepare('SELECT username FROM members WHERE password = :password AND active="Yes" '); 
      $stmt->execute(array('password' => $hashed)); 
      $row = $stmt->fetch(); 
      $_SESSION["uname"] = $row['username']; // this doesn't work 
     } 
     catch(PDOException $e) { 
      echo '<p class="bg-danger">'.$e->getMessage().'</p>'; 
     } 

    } 
+0

这些函数在哪里调用? –

+0

嗨,你的意思是你无法获得$ row ['username']的价值。 – vbrmnd

+1

session_start();开始了吗? –

回答

2

它实际上很简单wh你退后一步,看看它。

你的第一个功能是这样的:

public function login($username,$password){ 

笔记,你通过$username,这被拾起:在新的分割功能

$hashed = $this->get_user_hash($username); 

,你不及格$username

public function get_uname(){ 

    $hashed = $this->get_user_hash($username); //where is username coming from? 

所以,想必$this->get_user_hash()会返回任何当输入为空(也许为false)时,你已经编程它,所以你的查询不起作用,因为$hashed没有任何意义。合理?

+0

是的,当然,非常感谢。 – bonaca