我一直在使用这段代码,但无法弄清楚出了什么问题。
它可以正常登录,但它不会将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 :(得分:1)
你可能想要:
if($loginresult){
而不是:
if($loginresult !== true){
请注意,fetch
仅在发生故障时才会返回false
。
当然,在将任何输出发送到浏览器之前,您需要session_start();
。
答案 1 :(得分:0)
数组([0] =&gt; 00000 [1] =&gt; [2] =&gt;)数组的第一个元素是错误代码。这意味着查询没有错误。如果它没有回音。您可能需要评论设置会话的代码。我猜问题是搜索结果是空的,$ result是null,所以$ result-&gt; id会得到一个php错误,这使得echo不会被执行。