Jump to content


Photo

Visitantes E Usuarios Online


  • Faça o login para participar
15 replies to this topic

#1 <?PHPMAN?>

<?PHPMAN?>

    Ativo

  • Usuários
  • 300 posts
  • Sexo:Não informado

Posted 04/06/2005, 09:39

Fiz esse sisteminha que permite ver o numero de visitantes online e tambem o numero de usuarios logados.Aproveitei a logica de um sisteminha aqui do fórum que não lembro quem fez.

Primeiramente vc cria as tabelas no BD.
CREATE TABLE `maximo` (
  `quantidade` int(7) NOT NULL default '1',
  `data` date NOT NULL default '0000-00-00',
  `hora` time NOT NULL default '00:00:00'
) TYPE=MyISAM;

#
# Extraindo dados da tabela `maximo`
#

INSERT INTO `maximo` VALUES (1, '2005-06-04', '09:00:00');

# --------------------------------------------------------

#

CREATE TABLE `usersonline` (
  `id` int(7) NOT NULL auto_increment,
  `ip` varchar(255) NOT NULL default '',
  `TIME` int(12) NOT NULL default '0',
  `local` varchar(255) NOT NULL default '',
  `usuario` varchar(50) NOT NULL default '',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=38760;
nao esqueca de inserir algum valor na tabela maximo para ele funcionar


ai vc cria o arquivo conexao.php
<?
$conexao = mysql_connect("localhost","usuario", "senha");
$db = mysql_select_db("banco_de_dados");
?>

online_inc.php
<?

///////////////////////////////////////////////////////////////////////
//SCRIPT PARA MOSTRAR A QTDADE DE USUARIOS ONLINE
///////////////////////////////////////////////////////////////////////
/*Definindo Variáveis para a conexão com o banco de dados*/
require('conexao.php');
//------------------------------------------------------------------
//isso serve para pegar a query (se tiver) da pagina em que o visitante está
$query = $_SERVER['QUERY_STRING'];
if ($query == "")
{
	$query = "";
}
else
{
	$query = "?".$query;
}
//------------------------------------------------------------------
// pega o endereco da pagina onde o visitante está navegando
$local = $PHP_SELF.$query;

$ip = $_SERVER['REMOTE_ADDR'];//ip do visitante
$time = time ();
$data = date('Y-m-d');//pega a data
$hora = date('H:i:s');//pega a hora
//------------------------------------------------------------------
//verifica se o ip ja esta no BD
$Cs = mysql_query ("SELECT * FROM usersonline WHERE ip='$ip'")
or die ( mysql_error() );
//se o ip ja tiver no BD
if ( mysql_num_rows ($Cs) > 0 )
{
//atualiza a tabela dos users q estiverem online e seta o tempo , local, usuario(que vc pode pegar do seu sistema de login $_SESSION[login]) onde o ip for igual ao do visitante
mysql_query ("UPDATE usersonline SET time='$time', local='$local', usuario='$_SESSION[login]' WHERE  ip='$ip'")
   or die ( mysql_error () );
} else {
//caso nao tiver o ip do visitante ele insere o ip,tempo,local e usuario(se tiver a sessao registrada $_SESSION[login])
mysql_query ("INSERT INTO usersonline (ip, time, local, usuario) VALUES ('$ip','$time','$local','$_SESSION[login]')")
   or die ( mysql_error () );
}
//tempo em segundo para o tempo q o visitante fica sem atualizar a pagina
$timeout = $time - 500;
//deleta todos os que ficarem ociosos
mysql_query ("DELETE FROM usersonline WHERE time < $timeout")
or die ( mysql_error () );

$Cs2 = mysql_query ("SELECT * FROM usersonline")
or die ( mysql_error () );
//conta qtos estao online
$online = mysql_num_rows ($Cs2);

$Cs3 = mysql_query ("SELECT * FROM maximo")
or die ( mysql_error () );

$x = mysql_fetch_array ($Cs3);
$quant_atual = $x["quantidade"];
//se qtidade atual for menor q os nº q estiverem online
if ($quant_atual < $online)
{
//atualiza a tabela maximo e seta o valor de usuario q estao online(lembrando que deve haver um registro inicial na tabela maximo)
mysql_query ("UPDATE maximo SET quantidade='$online', data='$data', hora='$hora' WHERE quantidade='$quant_atual'")
   or die ( mysql_error () );
}
//variavel com o valor do maximo de usuario q ja estiveram online ao mesmo tempo
$maximo_user = ($quant_atual < $online) ? $online : $quant_atual;
///////////////////////////////////////////////////////////////////////
//SCRIPT PARA MOSTRAR A QTDADE DE USUARIOS ONLINE
///////////////////////////////////////////////////////////////////////
?>
esse arquivo vc coloca em cada pagina que vc deseja monitorar atraves de include
<? include ("online_inc.php"); ?>

Nao esqueça de abrir a sessão no começo da pagina que estiver monitorando(no caso de ter um sitema de login)
O qual vc muda de acordo com o seu script ($_SESSION[login])
<? 
session_start();
?>

o proximo codigo não vou comentar pois é parecido com o outro, nele vc monitora os visitantes online e logados, visualizando o IP, local, tempo que falta para ele ficar offline(se nao atualizar a pagina),usuario logado
<?
///////////////////////////////////////////////////////////////////////
//SCRIPT PARA MOSTRAR A QTDADE DE USUARIOS ONLINE
///////////////////////////////////////////////////////////////////////
/*Definindo Variáveis para a conexão com o banco de dados*/
require('conexao.php');

//time para ser armazenado no banco de dados
$time = time ();
//tempo em segundos que o usuario fica no banco se nao tiver atividade
$timeout = $time - 500;

//deleta os visitantes que estão inativos
mysql_query ("DELETE FROM usersonline WHERE time < $timeout") or die (mysql_error());

//seleciona os registros da tabela usersonline
$Cs2 = mysql_query ("SELECT * FROM usersonline") or die (mysql_error());
//conta o numero de registros encontrados
$online = mysql_num_rows ($Cs2);


//seleciona somente os visitantes que estão logados
$Cs2_logados = mysql_query ('SELECT * FROM usersonline where usuario != ""') or die (mysql_error());
//conta o numero de registros encontrados
$online_logados = mysql_num_rows ($Cs2_logados);

//seleciona o numero maximo de visitantes que estiveram online ao mesmo tempo
$Cs3 = mysql_query ("SELECT *, DATE_FORMAT(data, '%d/%m/%Y') as data_nova FROM maximo") or die (mysql_error());

$x = mysql_fetch_array ($Cs3);
$quant_atual = $x["quantidade"];
$data_nova = $x["data_nova"];
$hora = $x["hora"];

//se a qtidade atual de visitantes for maior que a do banco atualiza esta informacao
if ($quant_atual < $online)
{
	mysql_query ("UPDATE maximo SET quantidade='$online' WHERE quantidade='$quant_atual'") or die(mysql_error());
}

$maximo_user = ($quant_atual < $online) ? $online : $quant_atual;

echo "<font face=verdana size=2 color=#000000>Logados: </font><font face=verdana size=2 color=#FF0000>".$online_logados."</font><br>";
echo "<font face=verdana size=2 color=#000000>OnLine: </font><font face=verdana size=2 color=#FF0000>".$online."</font>";
echo "<br>";
echo "<font face=verdana size=2 color=#000000>Máximo:</font> <font face=verdana size=2 color=#FF0000>". $maximo_user."</font> - <font face=verdana size=2 color=#0000FF>".$data_nova." ".$hora."</font>";
echo "<br><br>";

echo "<table width=700  border=0 cellspacing=2 cellpadding=2>
  <tr>
    <td width=124 bgcolor=#000000><font color=#FFFFFF size=2 face=Verdana>IP:</font></td>
	<td width=373 bgcolor=#000000><font color=#FFFFFF size=2 face=Verdana>Local:</font></td>
	<td width=70 bgcolor=#000000><font color=#FFFFFF size=2 face=Verdana>Timeout:</font></td>
	<td width=107 bgcolor=#000000><font color=#FFFFFF size=2 face=Verdana>Usuário:</font></td>
  </tr>
</table>";
$query = mysql_query ("SELECT * FROM usersonline order by time ASC")
or die ( mysql_error () );

$cont = 1;
while ($linha=mysql_fetch_array($query)) {  
$ip_bd = $linha["ip"];
$local_bd = $linha["local"];
$time_bd = $linha["TIME"];
$usuario_bd = $linha["usuario"];


$falta = ($time_bd - $timeout);
//==============================================
//para alternar a cor da tabela
if ($cont ==1) { 
       $cor = "#C2DCF8";
       } 
       else {//1 
              if ($cont == 2){ 
            $cor = "#CCCCCC"; 
  	$cont = 0; //Aqui vc Zera o contador    
            } 
            //2 
            }//1 
//=============================================
?>
<table width="700"  border="0" cellspacing="2" cellpadding="2">
  <tr>
    <td bgcolor="<? echo $cor; ?>" width="124"><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><? echo $ip_bd; ?></font></td>
	<td bgcolor="<? echo $cor; ?>" width="373"><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><? echo $local_bd; ?></font></td>
	<td bgcolor="<? echo $cor; ?>" width="70"><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><? echo $falta; ?></font></td>
	<td bgcolor="<? echo $cor; ?>" width=107><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><? echo $usuario_bd; ?></font></td>
  </tr>
</table>
<?
$cont++;
}
?>


A pedidos, para mostrar somente os visitantes logados no site...

<?
///////////////////////////////////////////////////////////////////////
//SCRIPT PARA MOSTRAR A QTDADE DE USUARIOS ONLINE
///////////////////////////////////////////////////////////////////////
/*Definindo Variáveis para a conexão com o banco de dados*/
require('conexao.php');

//time para ser armazenado no banco de dados
$time = time ();
//tempo em segundos que o usuario fica no banco se nao tiver atividade
$timeout = $time - 500;

//deleta os visitantes que estão inativos
mysql_query ("DELETE FROM usersonline WHERE time < $timeout") or die (mysql_error());

//seleciona somente os visitantes que estão logados
$Cs2_logados = mysql_query ('SELECT * FROM usersonline where usuario != ""') or die (mysql_error());
//conta o numero de registros encontrados
$online_logados = mysql_num_rows ($Cs2_logados);

echo "<font face=verdana size=2 color=#000000>Logados: </font><font face=verdana size=2 color=#FF0000>".$online_logados."</font><br>";

echo "<table width=700  border=0 cellspacing=2 cellpadding=2>
  <tr>
    <td width=124 bgcolor=#000000><font color=#FFFFFF size=2 face=Verdana>IP:</font></td>
	<td width=373 bgcolor=#000000><font color=#FFFFFF size=2 face=Verdana>Local:</font></td>
	<td width=70 bgcolor=#000000><font color=#FFFFFF size=2 face=Verdana>Timeout:</font></td>
	<td width=107 bgcolor=#000000><font color=#FFFFFF size=2 face=Verdana>Usuário:</font></td>
  </tr>
</table>";

$query = mysql_query ("SELECT * FROM usersonline where usuario != '' order by time ASC") or die(mysql_error());

$cont = 1;
while ($linha=mysql_fetch_array($query)) {  
$ip_bd = $linha["ip"];
$local_bd = $linha["local"];
$time_bd = $linha["TIME"];
$usuario_bd = $linha["usuario"];


$falta = ($time_bd - $timeout);
//==============================================
//para alternar a cor da tabela
if ($cont ==1) { 
       $cor = "#C2DCF8";
       } 
       else {//1 
              if ($cont == 2){ 
            $cor = "#CCCCCC"; 
 	 $cont = 0; //Aqui vc Zera o contador    
            } 
            //2 
            }//1 
//=============================================
?>
<table width="700"  border="0" cellspacing="2" cellpadding="2">
  <tr>
    <td bgcolor="<? echo $cor; ?>" width="124"><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><? echo $ip_bd; ?></font></td>
	<td bgcolor="<? echo $cor; ?>" width="373"><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><? echo $local_bd; ?></font></td>
	<td bgcolor="<? echo $cor; ?>" width="70"><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><? echo $falta; ?></font></td>
	<td bgcolor="<? echo $cor; ?>" width=107><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><? echo $usuario_bd; ?></font></td>
  </tr>
</table>
<?
$cont++;
}
?>

Qualquer duvida é so postar....

Edição feita por: <?PHPMAN?>, 04/11/2005, 13:35.

Nome: Luciano André Bruch
WebSite: www.guiamedianeira.com.br
Profissão: WebDesigner / Programador
MSN:luciano@guiamedianeira.com.br

#2 Inu_yasha

Inu_yasha

    www.inuforum.cjb.net

  • Usuários
  • 269 posts
  • Sexo:Não informado

Posted 14/06/2005, 13:52

é possivel integrar com este sistema:
http://forum.wmonlin...howtopic=113654 ?

#3 <?PHPMAN?>

<?PHPMAN?>

    Ativo

  • Usuários
  • 300 posts
  • Sexo:Não informado

Posted 14/06/2005, 14:01

é possivel integrar com este sistema:
http://forum.wmonlin...howtopic=113654 ?

nao olhei direito o script acima mas creio que tem como...

é so trocar onde tem $_SESSION[login] por $_COOKIE["nome_usuario"];
Nome: Luciano André Bruch
WebSite: www.guiamedianeira.com.br
Profissão: WebDesigner / Programador
MSN:luciano@guiamedianeira.com.br

#4 henriquefr

henriquefr

    12 Horas

  • Usuários
  • 209 posts
  • Sexo:Não informado
  • Localidade:Cuiabá-MT
  • Interesses:PHP, Ajax e JavaScript.

Posted 08/08/2005, 13:59

muito bom esse scritp .. funcio legal aki ..
ja ate fiz as mudançar necessarias para o meu site ..funcio perfeito ...
vlw

falow ...
<?php

?>

#5 MarcoviZ

MarcoviZ

    ubuntu for human being

  • Usuários
  • 1137 posts
  • Sexo:Não informado

Posted 28/08/2005, 03:27

num itendi direito pra fazer o de membros on-line da um explicadinha melhor ai!
[]'s

#6 <?PHPMAN?>

<?PHPMAN?>

    Ativo

  • Usuários
  • 300 posts
  • Sexo:Não informado

Posted 29/08/2005, 08:40

num itendi direito pra fazer o de membros on-line da um explicadinha melhor ai!

O script do tutorial é para mostrar a qtidade de pessoas que estao navegando no site naquele momento, a parte do sistema de login de membros é com vc.

Basta vc alterar conforme o seu sistema de login:

$_SESSION[login] //se for através de session
$_COOKIE[login]; //se for através de cookie


OBS: troque login pelo nome que vc usa para identificar o login no seu sistema.
Nome: Luciano André Bruch
WebSite: www.guiamedianeira.com.br
Profissão: WebDesigner / Programador
MSN:luciano@guiamedianeira.com.br

#7 MarcoviZ

MarcoviZ

    ubuntu for human being

  • Usuários
  • 1137 posts
  • Sexo:Não informado

Posted 29/08/2005, 18:09

cara no meu site... eu ultiliso : $_SESSION[nome] para exibir o nome do usuario logado ai como faço pra adapitar com o teu sistema? eu mudei todos os $_SESSION[login] q tinha no teu cod para $_SESSION[nome] mais continua sem aparecer...


EDIT - aeee funcionoooo!!!

Edição feita por: MarcoviZ, 29/08/2005, 18:26.

[]'s

#8 leonelbr

leonelbr

    12 Horas

  • Usuários
  • 205 posts
  • Sexo:Masculino

Posted 02/11/2005, 00:57

Boa Madrugada!

Ae manows!

Esse sitema é muitobom, porem tem uma coisa nele que seria bom mudar, logicamente, se houver jeito...

É o seguite:

Nesse sistema se um visitante entrar no site. se ficar parado (+ de 500 segundos) em uma pag (chat por exemplo), então ele sai da lista de users on...

O que devo modificar para que os dados saiam da tabela somente no momento em que o visitante mude de pag e então sejam reinseridos? Atualmente é pelos -500 (timeout) o que implica de uma pessoa fechar o navegador e continuar na lista de users por algo em torno de 8 minutos.

Desde já agradeço.

PS: Parabéns ao <?PHPMAN?> pelo sistema.

Té +

Leonel Jr
FLASH FORWARD - Novo seriado da ABC. Um substituto para LOST?
Série de ficção cientifica que promete arrastar muitos fãs, principalmente os de Lost. Confira mais em:
www.flashforwardbr.com
-------------------------------------------------------------------------------------------------
Portal Evangélico ( AMIZADE | Downloads | Cartões Virtuais )

#9 demo

demo

    Novato no fórum

  • Usuários
  • 14 posts
  • Sexo:Não informado

Posted 02/11/2005, 22:47

manin, a primera parte do script soh cadasrtra e tal os user.. e o segunda parte como se fosse uma pagina para o ADMIN do site ve seus usuarios.. mas quero uma pagina q os usuarios do site vejaum outros usuarios logados e tal!
------------------------------ Oo ----------------------------

#10 <?PHPMAN?>

<?PHPMAN?>

    Ativo

  • Usuários
  • 300 posts
  • Sexo:Não informado

Posted 03/11/2005, 08:54

O que devo modificar para que os dados saiam da tabela somente no momento em que o visitante mude de pag e então sejam reinseridos? Atualmente é pelos -500 (timeout) o que implica de uma pessoa fechar o navegador e continuar na lista de users por algo em torno de 8 minutos.

Vc pode fazer algo usando a tag <body onUnload()> e abrir um pop-up que faz a exclusao do visitante qdo ele fecha a janela, mas nem todo mundo libera os pop-up e tals...

E se ele desconectar e nao fechar o navegador, ele ficara para sempre online.

Vc pode diminuir o timeout, ou implementar o teu sistema de chat para sempre atualizar o timeout a cada ação do visitante, e se ele ficar inativo por varios minutos isso significa que ele mesmo q nao tenha fechado o teu site, ele não esta online.

Fiz o sistema para uso proprio e achei interessante postar aqui no fórum, poís vi muita gente pedindo algo parecido, mas agora eu ficar fazendo modificações nele a toda hora nem rola, mesmo pq é um tutorial (ou script pronto, como preferirem).
Nome: Luciano André Bruch
WebSite: www.guiamedianeira.com.br
Profissão: WebDesigner / Programador
MSN:luciano@guiamedianeira.com.br

#11 <?PHPMAN?>

<?PHPMAN?>

    Ativo

  • Usuários
  • 300 posts
  • Sexo:Não informado

Posted 03/11/2005, 09:02

manin, a primera parte do script soh cadasrtra e tal os user.. e o segunda parte como se fosse uma pagina para o ADMIN do site ve seus usuarios.. mas quero uma pagina q os usuarios do site vejaum outros usuarios logados e tal!

cara, é so vc mudar o layout da pagina que mostra os visitantes online...

E para não mostrar o caminho relativo das paginas no servidor, é so trocar

$_SERVER['SCRIPT_FILENAME'] por $PHP_SELF

eu use $_SERVER['SCRIPT_FILENAME'], pq no meu caso preciso monitorar paginas que estão em dois servidores diferentes, ai não tinha como saber qual era o subdominio, pois o nome das paginas era o mesmo.
Nome: Luciano André Bruch
WebSite: www.guiamedianeira.com.br
Profissão: WebDesigner / Programador
MSN:luciano@guiamedianeira.com.br

#12 demo

demo

    Novato no fórum

  • Usuários
  • 14 posts
  • Sexo:Não informado

Posted 03/11/2005, 17:28

sabe aquela tabela q mostra o ip, time, url, tal......

e exibe o login do cara..ate ai da pra mudar.. mas la mostra todos os membros logados ou naum.. e quero q soh mostre logados? tem como modifica pra nois?
------------------------------ Oo ----------------------------

#13 <?PHPMAN?>

<?PHPMAN?>

    Ativo

  • Usuários
  • 300 posts
  • Sexo:Não informado

Posted 04/11/2005, 13:40

sabe aquela tabela q mostra o ip, time, url, tal......

e exibe o login do cara..ate ai da pra mudar.. mas la mostra todos os membros logados ou naum.. e quero q soh mostre logados? tem como modifica pra nois?

Editei o post original e adicionei a opção de ver somente os logados, e dei uma enxugada no outro script q mostra os visitantes online.
Nome: Luciano André Bruch
WebSite: www.guiamedianeira.com.br
Profissão: WebDesigner / Programador
MSN:luciano@guiamedianeira.com.br

#14 marcosgeo

marcosgeo

    Novato no fórum

  • Usuários
  • 4 posts
  • Sexo:Não informado

Posted 28/11/2005, 21:05

Olá pessoal,

estou começando agora no php, fiz o excelente tutorial do Henrique, só que quando faço o cadastro aparece a mensagem "o cadastro nao pode ser efetuado".
Achei que fosse alguma problema de conexão, por isso inseri alguns dados diretamente no mysql e fiz a pagina de exibir. Qual foi o resultado? Os dados aparecem :o . Então o que aconteceu alguém pode me ajudar?

Muito obrigado :rolleyes: .

#15 Binholim

Binholim

    Novato no fórum

  • Usuários
  • 17 posts
  • Sexo:Não informado
  • Localidade:Espirito Santo

Posted 28/11/2005, 21:43

gostei ae . parabens :D
Ai Meu Mengão eu gosto de vc
quero cantar ao mundo inteiro
a alegria de ser rubro negro .
:D




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq