Jump to content
joaocasta

[Resolvido] Online/Offline

Recommended Posts

joaocasta

Bom dia, queria mostrar na página de perfil de cada membro do site se ele está online ou offline por isso disseram-me para usar na base de dados, na tabela dos users, duas colunas, "ultima_vez_ativo" com DATETIME e "ativo" com TINYINT com o default de 0..

Queria que, quando esse user fizesse o login no site trocasse o 0 para 1, de modo a que indica que ele está online..

Tenho este código:

$query = mysql_query(" UPDATE users set ultima_vez_ativo = now() WHERE id = " . $_SESSION['id']);

Se me pudessem ajudar agradecia! ;)

Share this post


Link to post
Share on other sites
pikax

$query = mysql_query(" UPDATE users set ultima_vez_ativo = now() AND ativo=1 WHERE id = " . $_SESSION['id']);

assim?


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
pikax

desculpa, nao e' o AND e' ,

$query = mysql_query(" UPDATE users set ultima_vez_ativo = now(),ativo=1 WHERE id = " . $_SESSION['id']);


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
pikax

faz um SELECT em vez de um update para ver os valores que estao na base de dados


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
joaocasta

eu queria fazer algo como o P@P tem no perfil a dizer se está online ou offline e o tempo

Share this post


Link to post
Share on other sites
pikax

e' mais ou menos assim que se faz, mas qual e' o erro/problema que tas a ter?


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
pikax

nao consegues porque? o problema e' no update, no select, na base de dados, php, css, etc,etc..

Ainda nao sou bruxo, nao das informacoes suficientes para conseguir-te ajudar

  • Vote 1

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
Rui Carlos

Primeiro tens que definir os critérios para considerares um utilizador online. Penso que no P@P considera-se que um utilizador está online se efectuou alguma acção nos últimos 15min.

Segundo este critério, podes verificar se um utilizador está online comparando a data da última acção (que estás a guardar na BD), com a data actual.

Share this post


Link to post
Share on other sites
laeknishendr

Eu recomendo que crie uma tabela com colunas que digam respeito a id do usuário e o tempo da ultima ação que ele realizou no sistema, ai você pode criar uma função para determinar que o usuário efetuou alguma ação no sistema como isso:

mysql_query("UPDATE user_action SET last_activity = now() WHERE idusuario = $idusuario");

Share this post


Link to post
Share on other sites
HappyHippyHippo

Eu recomendo que crie uma tabela com colunas que digam respeito a id do usuário e o tempo da ultima ação que ele realizou no sistema, ai você pode criar uma função para determinar que o usuário efetuou alguma ação no sistema como isso:

mysql_query("UPDATE user_action SET last_activity = now() WHERE idusuario = $idusuario");

então explica lá porque razão deverá ele criar mais uma tabela, mais uma relação, etc, quando pode muito bem enfiar um simples campo na tabela de utilizadores, visto que obrigatoriamente terá de ser lido ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
softklin

Opá... isto do "usuário" só me dá vontade de chorar

MASNathan, usuário é um termo muito usado no Brasil, percebe-se perfeitamente o significado. Peço que evites esses comentários, porque mesmo estando a brincar, algumas pessoas podem achar ofensivo.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
MASNathan

MASNathan, usuário é um termo muito usado no Brasil, percebe-se perfeitamente o significado. Peço que evites esses comentários, porque mesmo estando a brincar, algumas pessoas podem achar ofensivo.

:confused: okapa, e já agora peço desculpa se ofendi alguém

Edited by MASNathan

Share this post


Link to post
Share on other sites
laeknishendr

então explica lá porque razão deverá ele criar mais uma tabela, mais uma relação, etc, quando pode muito bem enfiar um simples campo na tabela de utilizadores, visto que obrigatoriamente terá de ser lido ?

Sua ideia é bem melhor mesmo, não havia pensado nisso na hora.

Opá... isto do "usuário" só me dá vontade de chorar

Hahaha, usuário tem algum significado em especial para os portugueses?

Share this post


Link to post
Share on other sites
joaocasta

Pronto já fiz a parte do online, mas agora a parte do offline é que não estou a conseguir, sei que tenho de meter algo no logout.php para destruir o registo na tabela.

No código do online fiz isto:

<?php
# INCLUDE THIS FILE WHERE YOU WANT TO LOG THE USER, FOR EXAMPLE
#
# INSIDE   index.php
# WRITE    include("isonline.php");

if(isset($_SESSION["isonline"])) {

# EXECUTE THIS QUERY

mysql_query ("UPDATE users_online " .
"SET ultima_visita = \"" . date("c") . "\" " .
"WHERE `id` = " . $_SESSION["isonline"]);

} else {

$_SESSION["isonline"] = mt_rand();

# EXECUTE THIS QUERY

mysql_query ("INSERT INTO users_online (`user`,`id`,ultima_visita) VALUES(" .
 (isset($_SESSION["id"]) ? $_SESSION["id"] : "0") . "," .
 $_SESSION["isonline"] . "," .
 "\"" . date("c") . "\"" .
")");

}
?>

Share this post


Link to post
Share on other sites
HappyHippyHippo

como infelizmente adotaste a solução de criar uma nova tabela, terás então de remover os registos ou invalidar os dados do registo

SQL para remover o registo

$sql = "DELETE FROM users_online WHERE user = '{$_SESSION['id']}'";


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
HappyHippyHippo

o SQL é para retirar ... se cria outro é porque tens isso no teu código


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
joaocasta

Já resolvi! Para quem quiser saber/ usar, aqui tem o codigo....

$result = mysql_query("SELECT 1 FROM users WHERE `id` = '".$userid."' AND DATE_SUB(NOW(), INTERVAL 10 MINUTE) < ultima_visita") or die(mysql_error());
$userISonline = mysql_num_rows($result);
if($userISonline) {
echo "<img title='O membro está online' src='online.png'/>";
}
else {
echo "<img title='O membro está offline' src='offline.png'/>";
}

Edited by joaocasta

Share this post


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.