2011-11-17 160 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

相關問題