0

我一直在集思广益,寻找通知用户他们已解锁徽章的最佳方式的想法。它不需要是即时的或实时的。我在想,至少每次他们查看仪表板时,它都会运行以检查状态然后显示。这是我一直在思考的大方向。

我有两张桌子。一个称为badge_status,另一个称为users表。

在用户表中,我有用户和徽章字段,例如 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的表写入为“finished”。

在旁注中,我仍在转换为适当的 PDO。感谢您对此设置提供的任何建议、提示或改进!

4

1 回答 1

1

根据要求,这是我评论的答案版本:

与其将每个徽章上的信息作为列在用户表中,不如制作一个可以连接用户和徽章的交叉引用表,例如

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

在 user_badges 和两个引用的表之间设置外键。

这使您可以拥有无​​限数量的徽章。稍后添加一个新的就像向 user_badges 添加一行一样简单,而不是尝试更改您的(希望是巨大的)用户表。

于 2012-11-05T20:51:28.303 回答