2012-05-28 108 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); 
     } 
... 

您想要添加返回值,以便如果失败,则会更深入一层并找到另一个。如果该级别更深入成功,它会将值传递给上面的级别,这会将其传递到上一级,直到达到原始函数调用。