2013-07-18 127 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