2013-07-18 419 views
0

我一直在使用此代碼,但無法找出錯誤。使用PDO登錄系統

它可以登錄,但它不會將ID傳遞到會話中。它適用於JQuery。

$loginresult = $db->prepare("SELECT * FROM users WHERE username = :username AND password = :password"); 
$loginresult->bindParam(":username", $username); 
$loginresult->bindParam(":password", $encryptedPassword); 
$loginresult->execute(); 
$result = $loginresult->fetch(PDO::FETCH_OBJ); 

if($loginresult !== false){ 
     $_SESSION['loggedin'] = microtime(); 
     $_SESSION['userid'] = $result->id; 
     echo 'true'; 
}else{ 
     echo 'false'; 
} 

編輯:新代碼

<?php 
require('../../config.php'); 

$username = $_POST['username']; 
$password = $_POST['password']; 

$encryptedPassword = crypt($password,$salt); 

$loginresult = $db->prepare("SELECT * FROM users WHERE username = :username AND password = :password"); 
$loginresult->bindParam(":username", $username); 
$loginresult->bindParam(":password", $encryptedPassword); 
$loginresult->execute(); 
$count = $loginresult->rowCount(); 
     var_dump($count); 
     print_r($db->errorInfo()); 
if($count){ 
     $result = $loginresult->fetch(PDO::FETCH_OBJ); 
     var_dump($result); 
     print_r($db->errorInfo()); 
     session_start(); 
     $_SESSION['loggedin'] = microtime(); 
     $_SESSION['userid'] = $result->id; 
     echo $result->id; 
     //echo 'true'; 
}else{ 
     echo 'false'; 
} 
?> 
+0

難道你不應該檢查'$ result'是否爲'false',而不是'$ loginresult'? '$ loginresult'是你的'PDOStatement'對象。另外,正如@jeroen所述,你需要'session_start()' – Phil

回答

1

你可能想:

if($loginresult){ 

代替:

if($loginresult !== true){ 

注意fetch只有在發生故障的情況下返回false

當然,你需要session_start();之前任何輸出發送到瀏覽器。

+0

對不起。當將文本複製到Stack Overflow時,這是一個錯字。仍然不會給ID:/ – user2059490

+0

@ user2059490看我的編輯。 – jeroen

+0

很好的修復。但$ result-> id仍然不會返回任何內容。 – user2059490

0

Array([0] => 00000 [1] => [2] =>)數組的第一個元素是錯誤代碼。這意味着查詢沒有錯誤。如果它沒有任何迴應。您可能需要評論設置會話的代碼。我猜問題是搜索結果是空的,$ result是空的,所以$ result-> id將得到一個php錯誤,這使得echo不被執行。

+0

是的,我得到了,但記錄存在..它回來了。如果它錯了,就會返回錯誤。這就是沒有道理的地方。 – user2059490

+0

if($ loginresult!== false)。我認爲你應該使用if($ result!== false) – gywbd