Versão: 1.0
Funcionalidade: Mostra usuários online com listagem por área.
Instalação: Manual, faça você mesmo

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!!