Jump to content


Photo

Usuários Online


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

#1 redstyle

redstyle

    Expert

  • Usuários
  • 540 posts
  • Sexo:Masculino

Posted 30/12/2005, 20:02

Nome: Usuários Online
Versão: 1.0
Funcionalidade: Mostra usuários online com listagem por área.
Instalação: Manual, faça você mesmo :D
Visualização:
Sem visualização.

Comentários: Script mais para estudo, porem muito facil de modificar para usar em seu site.

- Mostra total usuários online
- Horário de entrada no site
- Último clique ou refresh
- Listagem dos usuários online mostrando o tempo total
- Listagem do total de usuários online por área

Crie a tabela
CREATE TABLE user_online (
`id` int(11) NOT NULL auto_increment,
`sess` varchar(50) NOT NULL,
`entrada` varchar(14) NOT NULL default '',
`ult_click` varchar(14) NOT NULL default '',
`ip` varchar(15) NOT NULL default '',
`area` text NOT NULL,
PRIMARY KEY  (`id`)
);

Não esqueça de alterar dados para conexão com MySQL e o nome do banco de dados.
<?php
session_start();
$session_id = session_id();
$timestamp  = time();
$ip = $_SERVER['REMOTE_ADDR'];
$area = $_SERVER['PHP_SELF'];

if (isset($_SERVER['QUERY_STRING']) && strlen($_SERVER['QUERY_STRING']) > 0){
	$area .= "?".$_SERVER['QUERY_STRING'];
}

$con = mysql_connect('localhost','usuario','senha');
$db  = mysql_select_db('banco_de_dados');

//deletando se está a mais de 3 minutos inativo
$sql_deleta = "delete from user_online where (($timestamp - ult_click)/60) >= 3";
$exe_deleta = mysql_query($sql_deleta) or die(mysql_error());

$sql_verifica = "select * FROM user_online WHERE sess = '$session_id'";
$exe_verifica = mysql_query($sql_verifica, $con) or die(mysql_error());
$num_verifica = mysql_num_rows($exe_verifica);
if ($num_verifica == 0){
	$entrada   = $timestamp;
	$ult_click = $timestamp;
	$sql_inclui = "insert into user_online (sess, entrada, ult_click, ip, area) values ('$session_id','$timestamp','$timestamp','$ip','$area')";
	$exe_inclui = mysql_query($sql_inclui, $con) or die(mysql_error());
	echo "incluiu !!<br />";
} else {
	$reg_verifica = mysql_fetch_array($exe_verifica, MYSQL_ASSOC);
	$entrada = $reg_verifica['entrada'];
	$ult_click = $timestamp;
	$sql_altera = "update user_online set ult_click = '$timestamp', area = '$area' where sess = '$session_id'";
	$exe_altera = mysql_query($sql_altera, $con) or die(mysql_error());
	echo "alterou ultimo click !!<br />";
}

//número de usuários online nos ultimos 3 minutos
$sql_online = "select count(*) as online FROM user_online";
$exe_online = mysql_query($sql_online, $con) or die(mysql_error());
$reg_online = mysql_fetch_array($exe_online, MYSQL_ASSOC);

echo "Hora de entrada : ".date("H:i:s", $entrada)."<br />";
echo "Ultimo click : ".date("H:i:s", $ult_click)."<br />";
echo "Número de usuários online nos ultimos 3 minutos = ".$reg_online['online']."<br />";
echo "<hr />";

// Mostrando todos os usuários online
$sql_mostra_online = "select * from user_online order by id desc";
$exe_mostra_online = mysql_query($sql_mostra_online, $con) or die(mysql_error());
$num_mostra_online = mysql_num_rows($exe_mostra_online);
if ($num_mostra_online > 0){
	echo '<h1>Usuários Online</h1>';
	echo '<table border="1">';
	echo  '<tr>
   	 <td>ID</td>
   	 <td>IP</td>
   	 <td>TEMPO ONLINE</td>
   	 <td>ÁREA</td>
 	 </tr>';
	while ($reg_mostra_online = mysql_fetch_array($exe_mostra_online, MYSQL_ASSOC)){
  //tempo online
  $min = floor(($timestamp - $reg_mostra_online['entrada'])/60);
  $seg = ($timestamp - $reg_mostra_online['entrada'])%60;
  if ($min < 10){
 	 $min = '0'.$min;
  }
  if ($seg < 10){
 	 $seg = '0'.$seg;
  }
  echo  '<tr>
   	 <td>'.$reg_mostra_online['id'].'</td>
   	 <td><a href="http://www.dnsstuff.com/tools/whois.ch?ip='.$reg_mostra_online['ip'].'">'.$reg_mostra_online['ip'].'</a></td>
   	 <td>'.$min.':'.$seg.'</td>
   	 <td>'.$reg_mostra_online['area'].'</td>
    </tr>';
	}
	echo '</table>';
}

echo '<hr />';

//selecionando o número de usuários por area
$sql_area = "select count(*) as numero_area, area from user_online group by area order by area";
$exe_area = mysql_query($sql_area, $con) or die (mysql_error());
$num_area = mysql_num_rows($exe_area);
if ($num_area > 0){
	echo '<h1>Usuários Online por Área</h1>';
	echo '<table border="1">';
	echo  '<tr>
   	 <td>ÁREA</td>
   	 <td>NÚMERO DE USUÁRIOS</td>
 	 </tr>';
	while($reg_area = mysql_fetch_array($exe_area, MYSQL_ASSOC)){
  echo  '<tr>
   	 <td>'.$reg_area['area'].'</td>
   	 <td>'.$reg_area['numero_area'].'</td>
    </tr>';
	}
	echo '</table>';
}
?>


Qualquer dúvida posta ae.

Falowz!!

Conheça meu blog para Aprender Laravel (Framework PHP)


#2 --The Matrix--

--The Matrix--

    Normal

  • Usuários
  • 118 posts
  • Sexo:Masculino
  • Localidade:Avaré - SP

Posted 02/01/2006, 09:39

ta mas q código q eu coloco tem q por issu em todas as paginas???
Ricardo Crivelli
Delphi Developer Certified
CobiT Foundation 4.1 Certified
@ricocrivelli
4Bytes Inc. - Desenvolvimento de sistemas especialistas web.

#3 redstyle

redstyle

    Expert

  • Usuários
  • 540 posts
  • Sexo:Masculino

Posted 02/01/2006, 12:39

Sim,
Mas ai você tira os "echos" somente deixando onde você quer para informar você ou outras pessoas.

Você também pode criar uma função com esse código e colocar em um include, fica a seu critério.

Falowz!

Conheça meu blog para Aprender Laravel (Framework PHP)


#4 thiagomaster

thiagomaster

    Normal

  • Usuários
  • 96 posts
  • Sexo:Não informado
  • Interesses:PHP, Webdesign, redes etc...infor...

Posted 05/01/2006, 09:37

e criando a include desse codigo aew ??
exemplo na minha index au invés de colocar esse código na index.php
eu coloco esse codigo em uma pagina separada com nome de uonline.php
dai na minha index.php eu chamo o include ou o requery
Um Designer Aprendendo PHP!
<?
$msn="thiagobsilva@msn.com";
$nome="Thiago";
$nick="thiagomaster";
echo "quem sabe ".$nick" será um phpmaster do forum"
?>
brincadeirinha
---------------------------
Vlw Alan pela correção!

#5 Luiz Ricardo Guimarães

Luiz Ricardo Guimarães

    Novato no fórum

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

Posted 18/12/2006, 17:39

Não seria mais facil salvar o codigo sem adicionar no index salvar exemplo "useronline.php" e utilizar em cada página?

<? include "useronline.php"; ?>

#6 gledsonweb

gledsonweb

    Novato no fórum

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

Posted 09/09/2008, 18:21

:rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:
jóia jóia deu certinhu brow..
mais se tiver mais de 1 usuario online vai mostrar varios ips na mesma pagina?
e se eu quiser colocar esse script numa area administrativa do site? vou poder ver de boa?
Abraço amigo fica com Deus!

Como eu faço pra qndo a pessoa se cadastra, o ip dela vai para o banco de dados junto com o cadastro!

se puder ajudar agradeço..
Abraço




1 user(s) are reading this topic

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

IPB Skin By Virteq