2011-11-17 131 views
1

我有用户名为users和日志表名为ulog。每次用户登录时,页面都会在日志表中添加新记录。预防用户登录如果用户已经登录

为了防止错误,在登录之前,我正在检查用户是否已经登录或不知道(我知道它并不那么重要,还有其他方法可用于此目的:对于前者,我可以通过检查对于cookie或会话也是如此,但我感兴趣的是如何用我的想法做到这一点)。

如果在ulog表中有关当前正在尝试登录的用户的表中至少有一行,则问题是代码完美工作。如果用户想要第一次登录,则会出现问题:代码“飞过”if ($stmt->num_rows > 0) {语句并选择else。 (因为num_rows返回0)

如何修改我的查询以处理这两种情况:第一次登录时,第二次,第三次......时间?

我的PHP侧登录代码看起来像那样。

$stmt = $db->prepare("SELECT u.id, u.fname, u.lname, u.mname, u.level, u.pass, u.salt, u.approved, u.ban, u2.logged_in FROM `users` AS u, `ulog` AS u2 WHERE u.email=? AND u2.user_id=u.id") or die($db->error); 
$stmt->bind_param("s", $email) or die($stmt->error); 
$stmt->execute() or die($stmt->error); 
$stmt->store_result(); 
if ($stmt->num_rows > 0) { 
$stmt->bind_result($id, $fname, $lname, $mname, $level, $db_pass, $salt, $approved, $ban, $logged_in) or die($stmt->error); 
$stmt->fetch() or die($stmt->error); 
if ($logged_in == 0) { 
} 
else die("You're already logged in"); 
} 
else die("There is no such email in db"); 

回答

1

尝试做一个左外连接的日志表。这将在他们第一次尝试登录时返回null,因为日志表中没有任何内容。您还需要对$ logged_in进行空检查,因为这是一种情况。越容易的事情将在$ LOGGED_IN VAR检查1,以验证他们登录,如超过1以外的任何将意味着他们没有登录

这是你的第一线重做。

$sql['userLoggedIn'] = " 
    SELECT u.id, u.fname, u.lname, u.mname, u.level,  
      u.pass, u.salt,  u.approved, u.ban,  u2.logged_in 
    FROM `users` AS u 
    LEFT OUTER JOIN `ulog` AS u2 
     ON u2.user_id = u.user_id 
    WHERE u.email = ?"; 

$stmt = $db->prepare($sql['userLoggedIn']) or die($db->error); 

试试看,看看它是否满足你的需求。左外连接基本状态请向我展示FROM表中返回FROM表中的所有内容。如果在LEFT OUTER JOIN表格中有任何东西,那么也可以使用这种方式

+0

修改代码,请 –

+0

尝试运行查询,让我知道它是如何工作。希望它能做到这一点,如果我输入正确的话 – abelito

+0

是的,很好的工作朋友。现在我正在检查'if($ logged_in!= 1){' –

2

试试这个;

 
SELECT u.id, u.fname, u.lname, u.mname, u.level, u.pass, u.salt, u.approved, u.ban, u2.logged_in FROM `users` AS u, LEFT JOIN `ulog` AS u2 ON (u.id = u2.user_id) WHERE u.email=? or die($db->error); 

希望它可以帮助

+0

您的SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以在'LEFT JOIN'ulog' AS u2 ON(u.id = u2.user_id)附近使用正确的语法WHERE u.email =?'在第1行 –

+0

将'FROM users AS u''更改为'FROM users AS u'(无逗号) – nickb

相关问题