Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:联机脱机状态_Php_Mysql - Fatal编程技术网

PHP:联机脱机状态

PHP:联机脱机状态,php,mysql,Php,Mysql,嗨,3个小时以来,我一直在努力工作,但没有得到我想要的结果。我想显示联机和脱机状态的用户列表 这是桌子 这里是我试图得到的结果 $loggedtime = time() - 300; // 5 minutes $query = 'SELECT userid, handle FROM ^users WHERE loggedin = '.$loggedtime.' ORDER BY userid ASC'; // below are scripts function qa_ pleses re

嗨,3个小时以来,我一直在努力工作,但没有得到我想要的结果。我想显示联机和脱机状态的用户列表

这是桌子

这里是我试图得到的结果

$loggedtime = time() - 300; // 5 minutes

$query = 'SELECT userid, handle FROM ^users WHERE loggedin = '.$loggedtime.' ORDER BY userid ASC';

// below are scripts function qa_ pleses refer this http://www.question2answer.org/functions.php

$result = qa_db_query_sub($query);  
$users = qa_db_read_all_assoc($result); 

$row = mysql_fetch_array($result);

if($row['userid'] > $loggedtime){
    echo $row['handle'].' is online';
} else {
    echo $row['handle'].' is offline';
}
这个不要太多

foreach($users as $user){
    if($user['userid'] > $loggedtime){
        echo $user['handle']. ' is online';
    } else {
        echo $row['handle'].' is offline';
    }
}
以上代码都不起作用。我是MYSQL和PHP新手,只知道基本的,所以请帮我解决这个问题

编辑: 我现在已经试过了,但不起作用

foreach($users as $user){
                if($user['loggedin'] > $loggedtime){
                    echo $user['handle']. ' is online';
                } else {
                    echo $row['handle'].' is offline';
                }
            }
编辑2

$query = "SELECT
    userid, handle, 
    CASE
        WHEN TIMESTAMPDIFF(SECOND, loggedin, NOW()) < 300
            THEN 'Online'
        ELSE 'Offline'
    END AS 'status'
FROM ^users
ORDER BY userid";

$result = qa_db_query_sub($query); 

while($user = mysql_fetch_array($result)){
    echo $user['handle'] . '<BR/>';
}
$query=“选择
用户ID,句柄,
案例
当TIMESTAMPDIFF(秒,loggedin,NOW())小于300时
然后“在线”
否则“离线”
以“状态”结尾
来自^users
按用户ID排序”;
$result=qa_db_query_sub($query);
while($user=mysql\u fetch\u数组($result)){
echo$user['handle']。
; }
新方法


请检查此新方法

为什么不只检查数据库端

SELECT
    userid, handle, 
    CASE
        WHEN TIMESTAMPDIFF(SECOND, loggedin, NOW()) < 300
            THEN 'Online'
        ELSE 'Offline'
    END AS 'status'
FROM ^users
ORDER BY userid
选择
用户ID,句柄,
案例
当TIMESTAMPDIFF(秒,loggedin,NOW())小于300时
然后“在线”
否则“离线”
以“状态”结尾
来自^users
按用户ID排序
您可以使用
TIMESTAMPDIFF(unit,datetime\u expr1,datetime\u expr2)
返回
datetime\u expr2–datetime\u expr1
,其中
datetime\u expr1
datetime\u expr2
datetime
表达式。一个表达式可以是
日期
,另一个表达式可以是
日期时间
date
值被视为
datetime
,必要时具有时间部分
'00:00'
。结果的单位(整数)由unit参数给出。单位的法定值与
TIMESTAMPADD()
函数说明中列出的值相同

请看下面的图片


另外,我强烈建议使用表名。

您的结构看起来很有趣,可以回答这个问题。您的loggedin字段实际上看起来更像“上次登录时”。你知道他们何时登录并不一定意味着他们“在线”

查询不起作用的原因是您正在将UNIX时间戳与mysql日期时间进行比较。此外,您使用的是=so,除非他们在五分钟前登录,否则这将不起作用

至少

SELECT userid, handle FROM ^users WHERE loggedin > '.date('Y-m-d h:i:s', time()-300).'ORDER BY....

既然您修复了用户id比较,那么让我们来解决下一个问题

您正在尝试比较字符串日期和unix时间戳。让我们将它们设置为相同的类型并进行比较:

foreach($users as $user)
{
  $user_time = strtotime($user['loggedin']);
  if($user_time > $loggedtime)
  {
    echo $user['handle']. ' is online';
  } else {
    echo $row['handle'].' is offline';
  }
}


总的来说,这不是解决这个问题的最佳方法,但它可能会让你工作。上面的数据库解决方案可能是最好的。

比较userid和$loggedtime似乎有点古怪和不合逻辑,因为它们没有共同点。修复这个问题,看看会发生什么。我已经编辑了更新的代码。你能检查一下并告诉我哪里错了吗?那么如果我使用这个查询,我就必须在php中有条件地检查吗?或者它将完成这个查询本身?很抱歉,这种类型的代码首先编写time@pixelngrain查看我的更新查询。如果你使用这个,你不必在PHP中做任何检查。好的,让我尝试一下,然后马上给你回复。请检查我的编辑2我正在获取所有用户,无论状态如何。很抱歉,在这件事上我真是个小飞象。请不要生气frustrate@pixelngrain您是否试图显示过去5分钟内用户的状态?如果是,那么决定他们在线还是离线的标准是什么?您还需要
echo$user[status]。'
这不是渲染任何东西。。!在我的本地机器上测试了这段代码,从上面手动输入datetimes。。它是有效的。是的,我能理解,但不知怎么的,我不明白。这些查询功能会导致问题吗<代码>结果=qa\U db\U查询\U子($query);$users=qa_db_read_all_assoc($result)查看您的MySQL查询<代码>选择用户ID,从^users处处理,其中loggedin='。$loggedtime。'ORDER BY userid ASC
此逻辑在lamen中表示:“让我知道用户的登录时间等于当前时间减去5分钟。除非你有一个精确到1秒的记录,否则你永远不会得到结果……拿出WHERE子句,看看它是如何工作的:
selectuserid,handlefrom^users ORDER BY userid ASC
Oh wow。。谢谢你通知我。。我百分之百同意你。那么现在我如何才能获得状态呢?这是一个比这篇文章所允许的复杂得多的答案,它需要额外的字段、会话检查等等……你的意思是创建额外的表吗?不一定是额外的表,但可能比你当前的结构更健壮。这完全取决于项目。实际上,我想显示用户列表,其中显示在线和离线状态。我正在使用这个开源软件。如果可能有帮助的话,您可以在这里阅读一些函数