2012-11-05 81 views
0

我一直在爲通知用戶他們已解鎖徽章的最佳方式進行頭腦風暴。它不需要是即時的或生活的。我至少在每次查看他們的儀表板時都會考慮檢查狀態,然後顯示。這是我一直在想的大方向。徽章解鎖通知設置

我有兩個表。一個名爲的badge_status和另一個用戶表。

在用戶表中我有用戶和徽章字段,如Badge1,Badge2,Badge3等。徽章字段的默認值設置爲「鎖定」。當用戶做出正確的行動來解鎖徽章時,該字段將變爲「解鎖」

我在想這樣的通知設置,但我想知道它是過度殺毒還是有更簡單的方法?

<?php 
$db = new PDO('mysql:host=hostname;dbname=dbname;charset=UTF-8', 'username', 'password'); 
$username = $_SESSION['jigowatt']['username']; 
$statement = $db->prepare("SELECT badge1, badge1_status FROM login_users, status_table WHERE username = :username"); 
$badge1 = $row['badge1']; 
$badge1_status = $row['badge1_status']; 



if($badge1_status == "finished") { 
} 
else if($badge1 =="unlocked") { 
// Show fade in pop up div for notification <div id="notification-div">Badge Unlocked!</div> 
$setBadgeValue = $db->prepare("UPDATE status_table SET badge1_status='finished' WHERE username= :username"); 

} 

<? 

我將有第二個表設置,如果徽章1的狀態爲「已完成」,那麼它不會做任何事情,從而確保該通知只顯示一次。

如果未完成並且badge1s狀態爲「解鎖」,則顯示通知DIV,然後將badge1_status的表寫入「已完成」。

在旁註中,我仍在轉換到正確的PDO。感謝您提供有關此設置的任何建議,提示或改進建議!

+0

不是答案,但您可能需要[禁用模擬預處理語句](http://stackoverflow.com/a/60496/508666)。 – PeeHaa

+0

只需列出徽章被解鎖的日期/時間並記錄上次解鎖通知的發佈情況就更有意義。自那時以來已經解鎖的任何徽章將是「新」。顯示通知,更新「上次通知」時間戳,並完成。 –

+1

「在用戶表中我有用戶和徽章字段,如Badge1,Badge2,Badge3」真的嗎?這些屬於交叉參考表(加入用戶和徽章)。 –

回答

1

按照要求,這裏是我的意見的回答版本:

而不是把信息在每個徽章作爲用戶表列,做一個交叉引用表可在用戶和徽章,例如之間的連接

users (user_id, name) 
badges (badge_id, name) 
user_badges (user_id, badge_id, date_earned) 

在user_badges和兩個引用的表之間設置外鍵。

這使您可以擁有無​​限數量的徽章。稍後添加一個新的就像向user_badges添加一行一樣簡單,而不是試圖改變(希望是巨大的)用戶表。