我一直在集思广益,想要通知用户他们已经解锁徽章的最佳方法。它不需要是即时的或现场的。我至少在每次查看他们的仪表板时都会想到它会检查状态然后显示。这是我一直在思考的大方向。
我有两张桌子。一个名为 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,然后将logo1_status的表写入“已完成”。
另一方面,我仍然在转换为适当的PDO。感谢您提供有关此设置的任何建议,提示或改进!
答案 0 :(得分:1)
根据要求,这是我的评论的答案版本:
不要将每个徽章上的信息作为用户表中的列放置,而是创建一个可以在用户和徽章之间加入的交叉引用表,例如
users (user_id, name)
badges (badge_id, name)
user_badges (user_id, badge_id, date_earned)
在user_badges和两个引用的表之间设置外键。
这允许您拥有无限数量的徽章。稍后添加一个新行就像向user_badges添加一行一样简单,而不是试图改变你的(希望是巨大的)用户表。