更改数据库中的标志,以显示某人是“在线”,但它不起作用

这是一个什么正在发生的细节

我现在面临的最大问题是,在login.php中,它应该更改数据库中的标志以显示一个人在线。

if($table=='chatmodels'){ $sql="update ".$table." set loginStatus=1 where user=".$id['user']; $upd=mysql_query($sql); 

它应该改变“chatmodels.loginStatus”等于1,一旦一个人成功login,但它不起作用。 它曾经工作。

我很确定我在数据库configuration中有什么问题。

这里是我的数据库http://img.zgserver.com/mysql/BcaII.jpg的截图

在屏幕截图中,我看到chatmodels表驻留在qoc1数据库中。

既然你使用的是PHP,你需要做以下两件事之一:

选项1:使用mysql_select_db ,如下所示:

mysql_select_db('qoc1'); 在调用更新查询之前

 if($table=='chatmodels'){ mysql_select_db('qoc1'); $sql="update ".$table." set loginStatus=1 where user=".$id['user']; $upd=mysql_query($sql); 

选项2:将qoc1放入查询本身:

 if($table=='chatmodels'){ $sql="update qoc1.".$table." set loginStatus=1 where user=".$id['user']; $upd=mysql_query($sql); 

试一试 !!!

其他的事情要记住

  • 如果表是MyISAM,它应该立即运行
  • 如果表是InnoDB,请确保autocommit = 1

美国东部时间2011-12-15 15:28

尝试在$upd=mysql_query($sql);之后放置'or die' $upd=mysql_query($sql); 并查看基于mysql的错误消息是什么回来的

你已经得到了一些建议,可以帮助你解决这个问题,但是会话到期的问题呢? 如果loginStatus==1 ,是否有一个cron作业或者是你已经发布的内容,那么对于不活动的用户,它loginStatus==1回0。

我认为实现相同结果的更好方法是让每个页面加载一个“lastSeen”时间戳。 然后,你的“在线”用户列表由“lastSeen”在可配置或可编程时间段内的所有人组成,而不是那些标志还没有被重置为0的人。