当用户访问某个主题时,设置一个标志:麻烦


Put a flag when a user visit a topic : trouble

假设我有一个带有用户/管理员可以访问/管理的主题的论坛。

当用户访问它时,首先我会检查主题是否存在;之后我给系统设置了一个标记,表示用户是否访问过该主题。

基本代码:

1        if((isset($_GET['trackid'])) && (ctype_digit($_GET['trackid']))) {
2            $query=mysql_query("SELECT date, user, zone, artist, event, data, res, complete, notes FROM topic WHERE trackid='".$_GET['trackid']."'",$mydb);    
3            if(mysql_num_rows($query)!=0) {
4                echo "Ok, The topic exist! Now I can say to the system that I have visited the topic"
5                
6                if (isset($_SESSION['nickname'])) $insert=mysql_query("INSERT IGNORE INTO recent_adds (user, trackid) VALUES ('".$_SESSION['nickname']."','".$_GET['trackid']."')",$mydb);                 
7            }
8        }

现在,假设User A到达第4行,同时管理员(User B)删除了这个主题(通过管理员的特殊函数,但这并不意味着什么):它将向数据库插入不一致的数据。(事实上,这个话题将不再存在)。

做这种操作的主要论坛/系统是如何解决并发问题的?

您可以使用FOREIGN key来禁止插入任何已被删除的内容。然后,您还可以获得级联删除的好处。

另一个解决方案是运行批处理作业来清理不一致的数据。按照这个解决方案,不要真的删除主题。只需将其标记为已删除,并使用状态标志,稍后删除即可。