Ver Mensaje Individual
  #2 (permalink)  
Antiguo 02/07/2009, 15:58
waty90
 
Fecha de Ingreso: diciembre-2006
Mensajes: 153
Antigüedad: 18 años, 3 meses
Puntos: 1
De acuerdo Respuesta: Saber que usuario esta conectado, no cuantos sino quien!

hola , nose muxo del tema ,pero esto te puede orientar un poco.

creas una tabla : ENlinea

filas: usuario,ip,fecha.

este codigo lo eh sacado de un sistema que se llama pfusers 3.2

<?php

/* Funciones */
if(!function_exists("pf_Stats")){
function pf_Stats(){

global $pagina, $get;

echo STATS_."<br>";

$query_tot=mysql_query("SELECT * FROM usuarios");
$total = mysql_num_rows($query_tot);

echo _TOTAL_USUARIOS . " " . $total."<br>";

$query_ult=mysql_query("SELECT * FROM usuarios ORDER BY id DESC LIMIT 1");
$ultim=mysql_fetch_array($query_ult);
if(!$pagina or !$get){ echo"NO HAY VARS"; }
echo _ULTIMO_USUARIO . " <a href='" . $pagina . "?" . $get ."=registrados&u=".$ultim[id]."'>" . $ultim[nick] . "</a><br>";

}
}
/* La variable de pfUsers es $userinfo[ + nombre del campo + ]; */

if($_COOKIE[nick] && $_COOKIE[contrasena] && $_COOKIE[id]){

$query = mysql_query("SELECT * FROM usuarios WHERE nick='$_COOKIE[nick]' and contrasena='$_COOKIE[contrasena]' and id='$_COOKIE[id]'");
$count = mysql_num_rows($query);

if($count != 1){
exit("Sesión erronea. Finalizando página...");
}

$userinfo = mysql_fetch_array($query);

$userinfo[ult_conexion] = $userinfo[conectado];
if($info[sexo] == 0){ $userinfo[sexo_txt] ="Masculino"; } else { $userinfo[sexo_txt]="Femenino"; }
$userinfo[contrasena] = "encriptada";
$userinfo[fecha_nac] = $info[n_dia] . "/" . $info[n_mes] . "/" . $info[n_ano];
$userinfo[fecha_txt] = date("d/m/y",$unserinfo[fecha]);
$userinfo[ult_conexion_txt] = date("d/m/y",$unserinfo[conectado]);

}


esta es la parte que contiene la funcion de usuarios_enlinea
Código PHP:
if(!function_exists("pf_Online")){
function 
pf_Online(){

global 
$pagina$get;

$fecha time() ; 
$tiempo 10 
$tiempo $fecha-$tiempo*60 
$ip $REMOTE_ADDR 
$usuario $_COOKIE[nick] ; 
mysql_query("DELETE FROM enlinea WHERE fecha < $tiempo") ; 

$query mysql_query("SELECT ip FROM enlinea WHERE ip='$ip'") ; 
if(
mysql_num_rows($query) == 0) { 
mysql_query("INSERT INTO enlinea VALUES ('$ip','anonimo','$fecha','anonimo')") ; 

else { 
mysql_query("UPDATE enlinea SET fecha='$fecha' WHERE ip='$ip'") ; 


if(
$_COOKIE[nick]) { 
$query mysql_query("SELECT * FROM enlinea WHERE usuario='$usuario'") ; 
if(
mysql_num_rows($query) == 0) { 
mysql_query("INSERT INTO enlinea VALUES ('$ip','$usuario','$fecha','usuario')") ; 

else { 
mysql_query("UPDATE enlinea SET fecha='$fecha' WHERE usuario='$usuario'") ; 



/* Usuarios en linea */
$query=mysql_query("SELECT * FROM enlinea WHERE tipo = 'usuario'");
$usuarios =mysql_num_rows($query);
/* Anónimos */
$query mysql_query("select * from enlinea where usuario = 'anonimo'") ; 
$anonimos mysql_num_rows($query) ; 
/* total */
$query=mysql_query("select * from enlinea");
$total mysql_num_rows($query);

echo 
ONLINE_."<br>";
echo 
TOTAL_ONLINE " " $total "<br>";
echo 
TOTAL_ANONIMOS " " $anonimos "<br>";
echo 
TOTAL_USUARIOS " " $usuarios;
echo
"<br>";
echo
"<marquee>";
$query=mysql_query("SELECT * FROM enlinea WHERE tipo = 'usuario'");
while(
$datos mysql_fetch_array($query)){
$query=mysql_query("SELECT * FROM usuarios WHERE nick = '$datos[usuario]')");
$userdata mysql_fetch_array($query);
    echo 
"| <a href='".$pagina."?".$get."=registrados&u=".$userdata[id]."'>".$datos[usuario]."</a> | ";

}
echo
"</marquee>";
}
}

?> 
en este codigo se definen las variables con los datos que necesitas para renovar la lista de usuarios conectados:


$fecha = time() ;
$tiempo = 10 ;
$tiempo = $fecha-$tiempo*60 ;
$ip = $REMOTE_ADDR ;
$usuario = $_COOKIE[nick] ;
mysql_query("DELETE FROM enlinea WHERE fecha < $tiempo") ;

con este codigo cuando el usuario lleve 10 min inactivo se le eliminara de la lista.


creo que basicamente seria insertar los datos recogidos cuando el usuario este conectado :

Código PHP:
$query mysql_query("SELECT * FROM ENlinea WHERE usuario='$usuario'") ; 
if(
mysql_num_rows($query) == 0) { 
mysql_query("INSERT INTO enlinea VALUES ('$ip','$usuario','$fecha','usuario')") ; 

y cuando se desconecta en el archivo salir.php los borras:

Código PHP:
mysql_query("DELETE FROM ENlinea WHERE usuario='$_SESSION[usuario]'"); 

luego creas un archivo online.php y los muestras.


con algo asi:

Código PHP:
<?php
if (isset($_REQUEST['listar']))
  
$inicio=$_REQUEST['listar'];
else
  
$inicio=0;
?>

<div id="tabla-usuarios-online">

<?php
$conexion
=mysql_connect("localhost","usuario_db","clave") or
  die(
"Problemas en la conexion");
mysql_select_db("basededatos",$conexion) or
  die(
"Problemas en la selección de la base de datos");

$registros=mysql_query("select usuario from ENlinea limit $inicio,6",$conexion) or
  die(
"Problemas en el select:".mysql_error());
echo 
'<br><a href="index.php">volver al index</a>';
echo 
'<table border="1">';
echo 
'<tr><td>Nombre de usuario</td></tr>';
$impresos=0;
while (
$reg=mysql_fetch_array($registros))
{
  
$impresos++;
  if (
$impresos==6)
    break;
  echo 
'<tr>usuarios online</tr>';    
  echo 
'<td><b>'.$reg['usuario'].'</b></td>';
  echo 
'</tr>';
}
echo 
'</table>';
mysql_close($conexion);
if (
$inicio==0)
  echo 
"anteriores ";
else
{
  
$anterior=$inicio-5;
  echo 
"<a href=\"?listar=$anterior\">Atras </a>";
}
if (
$impresos==6)
{
  
$proximo=$inicio+5;
  echo 
"<a href=\"?listar=$proximo\">Siguiente</a>";
}
else
  echo 
"siguientes";
?>
</div>


espero que te sirva de ayuda.


saludos