Jump to content

Status do utilizador


rjsma

Recommended Posts

Viva malta,

O que me traz hoje é o seguinte, gostava de saber como posso fazer que os restantes utilizadores registados podem ver o status de um utilizador. Do tipo da pap, nos topicos quando um user faz um post no lado esquerdo aparece o nome de utilizador, a imagem e o status(online e offline).Estava a pensar em usar duas imagens, 1 para quando estivesse online e outra para quando estivesse offline(bolinha verde e branca).

Também gostava de receber uma dica para que possar conta o nr. total de tempo online de um utilizador.

Abraços rapaziada

Link to post
Share on other sites
Lfscoutinho

Boas,

Existem várias formas. Uma delas é criares um campo timestamp e a cada clique que o utilizador faça, actualizas o campo timestamp. Depois, basta verificares se o último clique foi por exemplo há menos de 5, 10, 30 minutos.. O tempo que quiseres...

Link to post
Share on other sites

Na tabela utilizadores criei um campo do tipo datetime porque timestap tem uma limitacao(só vai ate ao ano 2038).

Depois criei um ficheiro javascript que faz uma actualização da página de 10 em 10 seg.


setInterval("actualiza()", 600000); 

function actualiza() {
  $.post("actualiza.php");
}

Depois no ficheiro actualiza.php tenho o seguinte:

$utilizador= $_SESSION["utilizador"];

if ($_SESSION["utilizador"]) {
  $online = mysql_query("UPDATE utilizadores set status_online=NOW() where utilizador='$utilizador'");
}  
?>

Agora o que não estou a conseguir verificar se o utilizador está inactivo por 15 minutos.Se estiver atribui o estado offline se estiver atribui o estato online.

Cumprimentos

Link to post
Share on other sites
Lfscoutinho

Boas,

Ahaha, desculpa mas não me consegui conter  :cheesygrin:

Essa do "só vai até ao ano de 2038" partiu-me todo lol !

Depois, 10 em 10 segundos !? Para quê isso !? Normalmente usa-se de 5 em 5 ou 10 em 10 minutos... 10 segundos é um exagero... Mas claro... depende da aplicação.

Para verificares, podes fazer uma consulta em que adicionas os 5 ou 10 minutos (à data e hora do último clique) e verificas se é maior que a data e hora actual. Se for, está activo. Caso contrário, offline.

Link to post
Share on other sites

Então como guardo o timestamp da ultima accao do user sem javascript. Fazer um update a todos links e submits  😲? Assim nunca mais saia daqui ao fazer desta maneira.


$utilizador= $_SESSION["utilizador"];

if ($_SESSION["utilizador"]) {
  $online = mysql_query("UPDATE utilizadores set status_online=NOW() where utilizador='$utilizador'");
}  

Link to post
Share on other sites

Sim, mas primeiro gostava de saber se havia uma solução mais rapida. Como deves saber, fazer um update a todos os links e submits nunca mais saia daqui. Mas em ultimo caso terá que ser.

Link to post
Share on other sites
Lfscoutinho

Boas,

Primeiro, a maioria dos sites trabalha em função de uma página. Segundo, se não for esse o teu caso, então crias uma função que faz isso e basta incluires o ficheiro. Para tudo é preciso trabalho :D

Link to post
Share on other sites

Sim, mas primeiro gostava de saber se havia uma solução mais rapida. Como deves saber, fazer um update a todos os links e submits nunca mais saia daqui. Mas em ultimo caso terá que ser.

Basta que haja uma acção no site para haver uma actualização do timestamp. Uma função genérica para isso chega, não dá muito trabalho .. torna é o site / servidor mais lento.

Link to post
Share on other sites

Pronto então fica assim, criei um ficheiro php a parte com um update:


<?php 

$utilizador= $_SESSION["utilizador"];

if ($_SESSION["utilizador"]) {
  $online = mysql_query("UPDATE utilizadores set status_online=NOW() where utilizador='$utilizador'");
}  
?>

E agora em todos os submits e links(<a>) fazo um include do ficheiro. Na bd em vez de usar timestamp estou a usar datetime.

Agora para ver se esta online ou offline tenho de aumentar 15 minutos do tempo que esta guardado na bd e comparar as 2 data, resumindo 2 variaveis 1 com a data que esta na bd e outra com 15 minutos de avanço, e depois é so usar o if para camparar as datas.

para aumentar o tempo penso que seja assim:


strtotime("+15 minute",$data);

Não sei se funciona com datetime.

Ainda não experimentei nada mas gostava de saber se estou a pensar e a fazer as coisas correctamente.

Cumprimentos

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.