Ver Mensaje Individual
  #26 (permalink)  
Antiguo 27/03/2005, 08:27
2Fast To You
 
Fecha de Ingreso: septiembre-2003
Ubicación: Santo Domingo - R. Dominicana
Mensajes: 606
Antigüedad: 20 años, 7 meses
Puntos: 0
jam1138 tube que hacerle alguna modificación para que funcionara mejor con el Tema de las Sessiones y séa mas rápido actualizando la Base de Datos.

Código PHP:
<?
// usamos la sesion de nombre definido.
     
session_name(autentificator);
// Iniciamos el uso de sesiones
     
session_start();
     
$usuario=$_SESSION['usuario_login'];

if(isset(
$usuario)){ // Busco una sesion
    
$visita=$usuario// para la busqueda
    
$tipo=1// donde tipo 1 = usuario registrado
} else {
    
$visita$REMOTE_ADDR// lo hubicamos por IP... Existen funciones para el caso de proxis y demás... no es el tema.
    
$tipo=0// donde 0 = visitante
}
$lapso=0// tiempo en minutos
include("conex.php"); // conecto
$conexion=Conectarse();

// primero borro todos los registros que hayan expirado... para mantener la BD ligera.. puedes dejarlos para darle otro uso...
mysql_query("DELETE FROM visitas WHERE hora<DATE_SUB(NOW(), INTERVAL $lapso MINUTE)"$conexion) or die ("<b>ERROR:</b><br>".mysql_error());

// Como ya se borraron todos los registros que no estan dentro del plazo... puedo buscar al usuario sin complicaciones
$buscamysql_query("SELECT * FROM visitas WHERE visitante='$visita' LIMIT 0,1"$conexion) or die ("<b>ERROR:</b><br>".mysql_error());

// lo encontré?
if(mysql_num_rows($busca)>0){
// si esta en la BD es usuario activo.. actualizo la nueva hora
    
mysql_query("UPDATE visitas SET hora=NOW() WHERE visitante='$visita'"$conexion) or die ("<b>ERROR:</b><br>".mysql_error());
} else {
// Si no esta.. lo registro
    
mysql_query("INSERT INTO visitas VALUES ('$visita', NOW(), '$tipo')"$conexion) or die ("<b>ERROR:</b><br>".mysql_error());
}

// Entonces, ahora todos en la BD están en línea
$en_lineamysql_query("SELECT tipo FROM visitas"$conexion) or die ("<b>ERROR:</b><br>".mysql_error());

// Puedo aplicar una query directamente del tipo COUN(tipo) FROM visitas GROUP BY tipo para evitar este bucle... pero creo así te quedará más claro
$registrados=0$visitantes=0;
while(
$row=mysql_fetch_assoc($en_linea)) {
    if(
$row['tipo']==1$registrados++; // no hago mas que contar cuantos hay registrados y cuantos visitantes
    
elseif($row['tipo']==0$visitantes++;
}
    
// Ahora recupero los registros de ayer y hoy...
$ultimosmysql_query("SELECT usuario, DATE_FORMAT(fecha,'%d') AS dia, DATE_FORMAT(CURDATE(), '%d') AS hoy FROM usuarios WHERE fecha>=DATE_SUB(CURDATE(), INTERVAL 1 DAY) ORDER BY fecha ASC"$conexion) or die ("<b>ERROR:</b><br>".mysql_error());

// lo mismo.. pude ocupar una query alternativa del tipo COUNT() y GROUP BY()...
$hoy=0$ayer=0;
while(
$row=mysql_fetch_assoc($ultimos)) {
    
$ultimo=$row['usuario']; // como ordenamos en ascendente, el último bucle nos dará el último usuario registrado
    
if($row['dia']==$row['hoy']) $hoy++;
    elseif(
$row['dia']<$row['hoy']) $ayer++;
}

//y... es todo.. tienes $registrados, $visitante, $hoy, $ayer y $ultimo
?>
Así identifica mejor la Sessión que necesito.
Código PHP:
// usamos la sesion de nombre definido.
     
session_name(autentificator);
// Iniciamos el uso de sesiones
     
session_start(); 
Luego le baje a 0 el valor de $lapso ya que se demoraba5 minutos para decirle a la Base de Datos que ya el Usuario no estaba y que el Visitante ya era Usuario. Jeje pero bueno ya todo anda bien. Una cosa que variable usastes para la Fecha ya que yo le estaba poniendo:

Código PHP:
 $date1 date("d")."-".date("m")."-".date("Y"); 
Saludos