2012-05-28 106 views
0

由於某些原因,check_em()成功時返回不起作用。我是新來的PHP,所以我在這裏虧本。PHP類函數忽略返回語句

<?php 

//Class to handle mysql 
class db_handler { 
    private $db_host = 'localhost'; 
    private $db_name = 'project'; 
    private $db_user = 'project'; 
    private $db_pass = 'dbpassword'; 
    private $db_con_mysql = ''; 
    private $db_con_db = ''; 

    public function check_em($username, $password) { 
     $db_query = "SELECT password FROM user WHERE name='".$username."' LIMIT 1;"; 
     if($this->db_con_mysql!='') { 
      $db_query_response = mysql_query($db_query) or die('Query failed: '.mysql_error()); 
      $db_query_return = mysql_fetch_row($db_query_response); 
      $db_sha1_hash = $db_query_return[0]; 
      echo $db_sha1_hash."<br>"; 
      echo sha1($password)."<br>"; 
      if(sha1($password)==$db_sha1_hash) { 
       return 'user valid'; //THIS DOESN'T WORK!?!?!? 
      } else { 
       return 'no good'; 
      } 
     } else { 
      $this->db_connect(); 
      $this->check_em($username, $password); 
     } 

    } 

    //Connect to mysql, then database 
    private function db_connect() { 
     $this->db_con_mysql = mysql_connect($this->db_host, $this->db_user, $this->db_pass) || die('Connection failed: '.mysql_error()); 
     $this->db_con_db = mysql_select_db($this->db_name) || die('Could not use'.$this->db_name.'. '.mysql_error()); 
     return; 
    } 

    //Disconnect from database and reset vars used to track connection. 
    private function db_disconnect() { 
     if($this->db_con_mysql!='') { 
      mysql_close(); 
      $this->db_con_mysql = ''; 
      $this->db_con_db = ''; 
      return; 
     } 
    } 

    public function fake($some_val) { 
     if($some_val<6) { 
      return TRUE; 
     } else { 
      return FALSE; 
     } 
    } 
} 

$db_obj = new db_handler(); 
$val1 = $db_obj->check_em('someuser','password'); //should return 'user valid' 
echo "val1:".$val1."<br>"; 
echo "<br><br>"; 

$val2 = $db_obj->check_em('someuser','passw0rd'); //should return 'no good' 
echo "val2:".$val2."<br>"; 
echo "<br><br>"; 

echo "test<br>"; 
echo $db_obj->fake(4)."<br>"; 

?> 

結果:

5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8 
5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8 
val1: 


5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8 
7c6a61c68ef8b9b6b061b28c348bc1ed7921cb53 
val2:no good 


test 
1 
+0

您需要在您的'else'塊中'返回$ this-> check_em($ username,$ password);''。 – cmbuckley

+0

我想說一個更大的問題是你的外部'else'沒有返回語句。 –

+0

但是,這只是終止腳本... –

回答

3

該行需要一回:

return $this->check_em($username, $password); 

但一個更明智的解決辦法是連接到數據庫的if內當連接null。真的,整個事情可以寫得更好,但我會留下來。

+0

TYVM爲新鮮的眼睛!我什至不能看到它... –

1
... 
else { 
      $this->db_connect(); 
      return $this->check_em($username, $password); 
     } 
... 

您想要添加返回值,以便如果失敗,則會更深入一層並找到另一個。如果該級別更深入成功,它會將值傳遞給上面的級別,這會將其傳遞到上一級,直到達到原始函數調用。