2012-05-28 3 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'에 return 문이 없다는 것입니다. –

+0

하지만 그냥 스크립트를 종료 ... –

답변

3

이 줄은 반환이 필요합니다 :

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

그러나 분별 솔루션은 연결이 nullif 내부 데이터베이스에 연결하는 것입니다. 정말로, 모든 것이 더 잘 쓰여질 수 있지만, 나는 그걸 맡길 것입니다.

+0

신선한 눈을위한 TYVM! 나는 그것을 볼 수 없었다 ... –

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

반환 값을 추가하면 실패 할 경우 한 단계 더 깊숙이 들어가고 다른 값을 찾습니다. 해당 레벨이 더 성공적으로 성공하면 위의 레벨까지 값을 전달합니다.이 값은 원래 함수 호출에 도달 할 때까지 위와 위로 전달할 수 있습니다.