0

我一直在使用这段代码,但不知道出了什么问题。

它可以登录,但不会将 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';
}
?>
4

2 回答 2

1

你可能想要:

if($loginresult){

代替:

if($loginresult !== true){

请注意,fetch只有在失败的情况下才会返回false

当然,您需要session_start();在将任何输出发送到浏览器之前。

于 2013-07-18T02:59:35.537 回答
0

Array( [0] => 00000 [1] => [2] => ) 数组的第一个元素是错误代码。这意味着查询没有错误。如果它什么都没有。您可能需要注释设置会话的代码。我猜问题是搜索结果是空的,$result 是空的,所以 $result->id 会得到一个 php 错误,这使得 echo 没有被执行。

于 2013-07-18T04:13:17.057 回答