2013-07-04 78 views
0
<?php 
require_once (realpath(dirname(__FILE__) . '/../includes/database.php')); 

class User { 
    public $email; 
    public $password; 

    public function find_email($email, $password) { 
     global $database; 
     $pswd = substr(md5($password), 0, 25); 
     $results_array = self::find_by_sql("SELECT * FROM tbl_users where email_id='".$email."' AND password='".$pswd."'"); 
     return !empty($results_array)? array_shift($results_array) : false; 
    } 

    public static function find_by_sql($sql){ 
     global $database; 
     $results = $database -> query($sql); 
     $object_array = array(); 
     while($row = $database -> fetch_array($results)){ 
      $object_array[] = self::instantiate($row); 
     } 
     return $object_array; 
    } 

    public static function instantiate($row) { 
     $event = new self; 
     foreach($row as $attribute => $value) { 
      if($event -> has_attribute($attribute)) { 
       $event -> $attribute = $value; 
      } 
     } 
     return $event; 
    } 
    private function has_attribute($attribute) { 
     $object_vars = get_object_vars($this); 
     return array_key_exists($attribute, $object_vars); 
    } 
} 

if (isset($_GET['email']) && isset($_GET['password'])) { 
    $result = new User(); 
    $result->find_email($_GET['email'], $_GET['password']); 
    echo json_encode($result); 
} 
?> 

這是login.php應該打印出所需用戶的json,但每當我嘗試獲取json時,都會返回。json_encode:值顯示爲null

{"email":null,"password":null} 

任何幫助,將不勝感激。謝謝。

+1

嗨,這需要首先進行基本的調試。什麼時候出問題了?你可以做測試輸出來找出在哪個點上數值變空了嗎? –

+0

這些值應該來自哪裏? –

+0

請'print_r($ _ GET)'也是'email_id',是一個數字還是一個字符串? –

回答

1

你不會對find_email的結果做任何事情。當find_email被調用時,你的班級不會更新它自己的屬性。相反,它將返回類別爲emailpassword屬性的新類實例,因此您需要捕獲返回值並對其進行編碼。

更改爲:

$result = new User(); 
$user = $result->find_email($_GET['email'], $_GET['password']); 
echo json_encode($user); 

旁註:看看SOLIDDependency Injection。 DI將優於global $Database

+0

更好的是,重構所以你不必爲了調用find_email而創建臨時的'User'對象。 –

+0

我同意這裏有很多重構的空間,這個班做得太多了。看起來班級正試圖成爲用戶實體和用戶經理/工廠。 – MrCode

+0

很好.. –