Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

zombie

Usuarios Online (logado)

Recommended Posts

PEssoal, bom tenho um sistema de autenticação, gostaria de puxar os nomes dos usuarios online (quando logados) no sistema, como poderia estar fazendo esse processo?

 

ex. o kra vai la e faz o login, dai na tela (restrita), vai estar os nomes de todos que estão online naquele momento, tipo assim:

 

Usuários online: Fábio, André, Pedro...etc

 

alguem tem uma ideia? sugestão?

 

obrigado desde ja.

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

quando ele fizer o login , tu manda guardar o nome , ou login dele em uma sessao , entao tu so puxa novamente a sessao nome , digamos;

 

/*.
.
.
./teus codigos*/
session_start();
$_SESSION["nome"] = $nome;

pode fazer assim na pag de exibição:

 

session_start();
if(isset($_SESSIO["nome"])){
$nome = $_SESSION["nome"];
}
pode usar essa como include , que facilita muito , e dpois eh so chamar sempre a variavel nome que ele te retorna o que foi salvo na sessao..

 

Felipe

Compartilhar este post


Link para o post
Compartilhar em outros sites

eai tudo joia kra?

 

então quando o usuario loga, eu puxo o nome dele para dar as boas vindas. só que como eu faria para puxar o nome de todos os logados no sistema? dai quando a pessoa sair some o nome, cada um loga com os dados diferente. alguma dica? tipo de forum mesmo, quando o usuario ta logado fica o nome la, dai quando ele sai, some o nome.

 

abs vlwww

Compartilhar este post


Link para o post
Compartilhar em outros sites

pessoal, to tentando assim:

$tempmins = 15;
$ip=$REMOTE_ADDR;
if(mysql_num_rows(mysql_query("SELECT * FROM usuariosonline WHERE ip='".$ip."'"))>0) {  
mysql_query('UPDATE usuariosonline SET time="'.time().'" WHERE  ip="'.$ip.'"');
} else {
mysql_query('INSERT INTO usuariosonline (ip,time) VALUES ("'.$ip.'","'.time().'")');
}
mysql_query('DELETE FROM usuariosonline WHERE time<'.(time()-($tempmins*60)));
$select = mysql_num_rows(mysql_query("SELECT * FROM usuariosonline WHERE ip='".$ip."'"));
while( $i = mysql_fetch_row( $select ) )
{

$sql_usuario = mysql_query("SELECT * FROM usuarioscadastro WHERE id='".$i[1]."' LIMIT 1");
while( $c = mysql_fetch_object( $sql_usuario ) )
{
echo $c['usuario'].'está online';
}

}
porem ta dando erro, Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in

 

alguem pode me dar uma "luz", obrigado

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Imagem Postada

 

Por favor, leia:

 

http://forum.imasters.com.br/index.php?/topic/375800-orientacoes-para-uma-boa-participacao/

 

sempre, sempre enqnto em ambiente de desenvolvimento, execute as tuas queries, com:

or die( mysql_error() );

$query = mysql_query("SELECT * FROM usuariosonline WHERE ip='{$ip}'")or die( mysql_error() );
if( mysql_num_rows( $query ) ){

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa, peço desculpa pelos erros.

 

bom tentei assim e a tela fica branca, o que pode estar errado?

 

$tempmins = 15;
$ip=$REMOTE_ADDR;
if(mysql_num_rows(mysql_query("SELECT * FROM usuariosonline WHERE ip='".$ip."'"))>0) {  
mysql_query('UPDATE usuariosonline SET time="'.time().'" WHERE  ip="'.$ip.'"');
} else {
mysql_query('INSERT INTO usuariosonline (ip,time) VALUES ("'.$ip.'","'.time().'")');
}
mysql_query('DELETE FROM usuariosonline WHERE time<'.(time()-($tempmins*60)));
$query = mysql_query("SELECT * FROM usuariosonline WHERE ip='{$ip}'")or die( mysql_error() );
if( mysql_num_rows( $query ) ){ 
{

$sql_usuario = mysql_query("SELECT * FROM usuarioscadastro WHERE id='".$i[1]."' LIMIT 1");
while( $c = mysql_fetch_object( $sql_usuario ) )
{
echo $c['usuario'].'está online';
}

}

 

no caso quando ele mostrar o osuario online, ele mostrará somente 1 ou to errado? como faria para separar por virgula todos os que estiverem online??

 

atensiosamente

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tipo eu mudaria umas coisas no seu codigo, tivaria o campo IP da sua tabela e colocaria o campo id_usuario para você poder identificar realmente o usuario online, pois dessa sua forma se 2 ou mais usuários tiverem vindo da mesma REDE eles terao o mesmo IP.

 

 

<?php
	$tempmins = 15;
	$id = $_GET['id_usuario']; // pega o ID do usuário ao invez do IP
	
	if(mysql_num_rows(mysql_query("SELECT * FROM usuariosonline WHERE id_usuario='".$id."'"))>0) {  
		mysql_query("UPDATE usuariosonline SET time='".time()."' WHERE  id_usuario='".$id."'");
	} else {
		mysql_query("INSERT INTO usuariosonline (id_usuario,time) VALUES ('".$id."','".time()."')");
	}

	// vai apagar os usuários que passaram do tempo limite,
	// assim mantendo apenas os usuários que realmente estão logados
	mysql_query("DELETE FROM usuariosonline WHERE time<'".(time()-$tempmins)."'");
	
	$sql_usuario = mysql_query("SELECT UC.usuario FROM usuariosonline UO, usuarioscadastro UC WHERE UO.id_usuario=UC.id");

	while ($c = mysql_fetch_object($sql_usuario)) {
		echo $c['usuario'].", ";
	}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

entendi, fiz a alteração porem a pagina fica toda branca, nenhuma mensagem de erro. o codigo ta assim, o que pode estar errado?

 

$tempmins = 15;
$ip=$REMOTE_ADDR;
if(mysql_num_rows(mysql_query("SELECT * FROM usuariosonline WHERE ip='".$ip."'"))>0) {  
mysql_query('UPDATE usuariosonline SET time="'.time().'" WHERE  ip="'.$ip.'"');
} else {
mysql_query('INSERT INTO usuariosonline (ip,time) VALUES ("'.$ip.'","'.time().'")');
}
mysql_query('DELETE FROM usuariosonline WHERE time<'.(time()-($tempmins*60)));
$query = mysql_query("SELECT * FROM usuariosonline WHERE ip='{$ip}'")or die( mysql_error() );
if( mysql_num_rows( $query ) ){ 
{

$sql_usuario = mysql_query("SELECT * FROM usuarioscadastro");
while( $c = mysql_fetch_object( $sql_usuario ) )
{
  echo $c['usuario'].', ';
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu ainda faria mais modificação.. nao criaria essa sua tabela de usuarioonline.. teria apenas a de usuario cadastrado e acrescentaria apenas o cmapo time nela.. dai só atualizaria ela.. e verificaria apenas usuários com time superior ao limite..

 

Assim:

<?php
	$tempmins = 15;
	$id = $_GET['id_usuario']; // pega o ID do usuário ao invez do IP
	
	mysql_query("UPDATE usuarioscadastro SET time='".time()."' WHERE  id='".$id."'");

	$sql_usuario = mysql_query("SELECT * FROM usuarioscadastro WHERE time >= '".(time()-$tempmins)."'");

	while ($c = mysql_fetch_object($sql_usuario)) {
		echo $c['usuario'].", ";
	}
?>

Sua página esta dando erro pq você esta abrindo 2 { no IF

 

if( mysql_num_rows( $query ) ){

{

 

Sua página esta dando erro pq você esta abrindo 2 { no IF

 

if( mysql_num_rows( $query ) ){

{

Compartilhar este post


Link para o post
Compartilhar em outros sites

vou tentar aqui, mais no caso eu utilizo $_SESSION, nas mensagens de boas vindas to puxando assim:

 

<?php echo $row_loja['usuario']; ?>

 

no caso como eu puxaria nessa linha, para nao ter erro.

 

$id = $_GET['usuario']; // pega o ID do usuário ao invez do IP

 

vlw desde ja

 

 

Editando: tirei {

e deu erro em uma linha que tinha }, dai se tiro da pagina branco e se deixo o erro permanece.

 

Editando Novamente:

 

fiz assim:

 

$sql_usuario = mysql_query("SELECT * FROM usuarioscadastro");
while( $c = mysql_fetch_object( $sql_usuario ) )
{
  echo $c->usuario.', '; 
}

 

e apareceu todos os nomes da tabela de cadastrados, não era para aparecer somente quem estivece logado? ou to fazendo errado......

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como eu faço para pegar o id do usuario logado no sistema?

 

<?php
        $tempmins = 15;
        $id = $_GET['id_usuario']; // pega o ID do usuário ao invez do IP
        
        mysql_query("UPDATE usuarioscadastro SET time='".time()."' WHERE  id='".$id."'");

        $sql_usuario = mysql_query("SELECT * FROM usuarioscadastro WHERE time >= '".(time()-$tempmins)."'");

        while ($c = mysql_fetch_object($sql_usuario)) {
                echo $c->usuario.', ';
        }

Compartilhar este post


Link para o post
Compartilhar em outros sites

como você disse que esta utilizando SESSION

 

passa para o ID o valor da SESSION do usuario...

 

 

$id = $_SESSION["id_do_usuario"];

Compartilhar este post


Link para o post
Compartilhar em outros sites

pensei que estava puxando errado, porque quando faço isso abaixo não aparece nada, o que pode estar errado no codigo?

 

$tempmins = 15;
        $id = $_SESSION['usuario'];
        
        mysql_query("UPDATE usuarioscadastro SET time='".time()."' WHERE  id='".$id."'");

        $sql_usuario = mysql_query("SELECT * FROM usuarioscadastro WHERE time >= '".(time()-$tempmins)."'");

        while ($c = mysql_fetch_object($sql_usuario)) {
                echo $c->usuario.', ';
        }

Pessoal, to fazendo assim:

 

$tempmins = 15;
$ip=$REMOTE_ADDR;
if(mysql_num_rows(mysql_query("SELECT * FROM usuariosonline WHERE ip='".$ip."'"))>0) {  
mysql_query('UPDATE usuariosonline SET time="'.time().'" WHERE  ip="'.$ip.'"');
} else {
mysql_query('INSERT INTO usuariosonline (ip,time) VALUES ("'.$ip.'","'.time().'")');
}
mysql_query('DELETE FROM usuariosonline WHERE time<'.(time()-($tempmins*60)));
$query = mysql_query("SELECT * FROM usuariosonline WHERE ip='{$ip}'")or die( mysql_error() );
if( mysql_num_rows( $query ) ){ 
}

$sql_usuario = mysql_query("SELECT * FROM usuarioscadastro");
while( $c = mysql_fetch_object( $sql_usuario ) )
{
                echo $c->usuario.', ';
        }

só que os dados que esta exibindo são os nomes de todos os cadastrados, gostaria de mostrar somente os que estiverem online, como poderia fazer essa alteração? será que se eu gravar o nome do usuario logado na tabela de usuariosonline, e exibir eles, daria certo? depois como eu iria deletar os inativo? e como faria para inserir o usuario logado?

 

abs e obrigado

 

Galera, to tentando aqui, fiz dessa forma, mais nao aparece nada e nem erro. o que pode estar errado?

 

$tempmins = 1;
        $id = $_SESSION['usuario'];

        mysql_query("UPDATE usuarioscadastro SET time='".time()."' WHERE  id='".$id."'");

        $sql_usuario = mysql_query("SELECT * FROM usuarioscadastro WHERE time >= '".(time()-$tempmins)."'");

        while ($c = mysql_fetch_object($sql_usuario)) {
                echo $c->usuario.', ';
        }

Compartilhar este post


Link para o post
Compartilhar em outros sites

$sql_usuario = mysql_query("SELECT * FROM usuarioscadastro WHERE time >= '".(time()-$tempmins)."'")or die( mysql_error() );

echo $sql_usuario, '<br />';

if( !mysql_num_rows( $sql_usuario ) ) echo 'Nenhum registro encontrado!!';

Compartilhar este post


Link para o post
Compartilhar em outros sites

faz isso aki...

 

joga o seu SQl dentro de uma variavel e imprima ela..

 

        $tempmins = 1;
        $id = $_SESSION['usuario'];

        mysql_query("UPDATE usuarioscadastro SET time='".time()."' WHERE  id='".$id."'");

//       $sql_usuario = mysql_query("SELECT * FROM usuarioscadastro WHERE time >= '".(time()-$tempmins)."'")or die( mysql_error() );
       $sql_usuario = "SELECT * FROM usuarioscadastro WHERE time >= '".(time()-$tempmins)."'";
       echo $sql_usuario, '<br />';
//       if( !mysql_num_rows( $sql_usuario ) ) echo 'Nenhum registro encontrado!!';

tenta jogar oque ele imprimiu na tela direto no seu banco para evr se vai dar algum erro...

 

Tipo dá uma olhada nesse meu exemplo que eu fiz para você ter uma idéia de como funciona + ou - essas paardas de on-line

 

tabela

CREATE TABLE `usuario` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(255) COLLATE latin1_swedish_ci NULL DEFAULT NULL,
  `time` varchar(255) COLLATE latin1_swedish_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
);

 

index.php

<?php
	session_start();
	
	require("conexao.php");
	
	if (isset($_POST['id'])) {
		$id = $_POST['id'];
		mysql_query("UPDATE usuario SET time='".time()."' WHERE id='".$id."'");
	}
?>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
	$(document).ready(function(){
		$("td#online").load("online.php?acao=online");
		loop();
	});
	
	function loop() {
		<?php if (isset($_POST['id'])) { ?>
			$("td#online").load("online.php?acao=atualiza&id="+<?php echo $id; ?>);
		<?php } else { ?>
			$("td#online").load("online.php?acao=online");
		<?php } ?>
		
		// FAZ O LOOP SER CHAMADO A CADA 5 SEGUNDOS
		setTimeout('loop()', 5000);
	}	
</script>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td>
        <form id="form1" name="form1" method="post" action="">
          id
          <input type="text" name="id" id="id" />
          <input type="submit" name="button" id="button" value="Submit" />
        </form>
    </td>
  </tr>
  <tr>
    <td>Usuarios on-line:</td>
  </tr>
  <tr>
    <td id="online"> </td>
  </tr>
</table>

 

online.php

<?php
	require("conexao.php");
	
	$acao = $_GET['acao'];
	
	if ($acao == "atualiza") {
		$id = $_GET['id'];
		mysql_query("UPDATE usuario SET time='".time()."' WHERE id='".$id."'");
		$time = time()-10;
		$sql = mysql_query("SELECT * FROM usuario WHERE time>='".$time."'");
		while ($rows = mysql_fetch_array($sql)) {
			echo $rows["nome"].", ";
		}
	}
	
	if ($acao == "online") {
		$time = time()-10;
		$sql = mysql_query("SELECT * FROM usuario WHERE time>='".$time."'");
		while ($rows = mysql_fetch_array($sql)) {
			echo $rows["nome"].", ";
		}
	}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eai tudo joia, obrigado pelo help.

 

quando fiz a alteração aqui deu esse erro:

 

Resource id #6

Nenhum registro encontrado!!

 

oque pode ser?

 

$tempmins = 1;
        $id = $_SESSION['usuario'];

        mysql_query("UPDATE usuarioscadastro SET time='".time()."' WHERE  id='".$id."'");

       $sql_usuario = mysql_query("SELECT * FROM usuarioscadastro WHERE time >= '".(time()-$tempmins)."'")or die( mysql_error() );
       echo $sql_usuario, '<br />';
       if( !mysql_num_rows( $sql_usuario ) ) echo 'Nenhum registro encontrado!!';

criei o campo na tabela usuarioscadastro

`time` varchar(12) NOT NULL,

 

 

EDITANDO: mudei aqui uma coisa, dai apareceu o dado da session que no caso é o email, mais olhei na tabela e nao foi inserido nada no "time" e tambem alem de exibir o email mostrou tb o Nenhum registro encontrado!!

 

$tempmins = 1;
        $id = $_SESSION['usuario'];

        mysql_query("UPDATE usuarioscadastro SET time='".time()."' WHERE  id='".$id."'");

       $sql_usuario = mysql_query("SELECT * FROM usuarioscadastro WHERE time >= '".(time()-$tempmins)."'")or die( mysql_error() );
       echo $usuario, '<br />';
       if( !mysql_num_rows( $sql_usuario ) ) echo 'Nenhum registro encontrado!!';

dai no caso para mostrar o nome, como eu alteraria tambem, porque to usando email para logar no sistema, dai teria que mudar para exbir o nome do usuario.

 

atenciosamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

$tempmins = 1;
        $id = $_SESSION['usuario'];

        mysql_query("UPDATE usuarioscadastro SET time='".time()."' WHERE  id='".$id."'");

       $sql_usuario = mysql_query("SELECT * FROM usuarioscadastro WHERE time >= '".(time()-$tempmins)."'")or die( mysql_error() );
       echo $usuario, '<br />';

dessa forma ele me mostra o nome que esta logado, porem no time não ta inserindo nada, dai fiz o que o amigo falou de imprimir na tela e jogar pro bd mais nao deu erro nenhum, no caso nesse codigo se colocar um comando para inserir no bd, será que resolveria? porem será que depois que tiver inserido o time no bd, ele vai deletar ou vai ficar la o tempo?

 

agradeço desde ja

 

PS: to dando uma olhada no codigo postado acima, para dar uma estudada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tentei assim, mais ele deleto tudo que tinha cadastrados todos usuarios.

$tempmins = 1;
        $id = $_SESSION['usuario'];
if(mysql_num_rows(mysql_query("SELECT * FROM usuarioscadastro WHERE time='".$time."'"))>0) {  
mysql_query('UPDATE usuarioscadastro SET time="'.time().'" WHERE  time="'.$time.'"');
} else {
mysql_query('INSERT INTO usuarioscadastro (time) VALUES ("'.time().'")');
}
mysql_query('DELETE FROM usuarioscadastro WHERE time<'.(time()-($tempmins*60)));

        mysql_query("UPDATE usuarioscadastro SET time='".time()."' WHERE  id='".$id."'");

       $sql_usuario = mysql_query("SELECT * FROM usuarioscadastro WHERE time >= '".(time()-$tempmins)."'")or die( mysql_error() );
       echo $usuario, '<br />';

a intensão é inserir o tempo no banco, e quando o usuario sair (deslogar) apagar o tempo no banco de dados,

 

mostrar os usuarios que estiverem logado no sistema.

 

será que esse não é o caminho? o que pode estar errado? agradeço desde ja...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.