Ver Mensaje Individual
  #20 (permalink)  
Antiguo 26/03/2005, 19:56
Avatar de jam1138
jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
...

Esque precisamente de eso se trata.. no es lo que yo este pensando hacer... es lo que tú estés pensando hacer. la estructura que te dí es la más básica...
Primero ves si es usuario o no y luego haces lo que haces (lo que ya haces) para cada respectivo caso... Ahora bien, esa no es la única manera... esto depende ya de cada cabeza... esa es la verdadera programación...

Pero bueno... Sábado de gloria ( y no me he mojado!) y el día estubo un tanto flojo... así quise experimentar con algo.. y ví que podia matar dos pájaros de un tiro si lo aplicaba a esto que pretendes... pués bien, resultó esto:
Código PHP:
<?
session_start
();
$usuario=$_SESSION['usuario'];

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=5// tiempo en minutos 
include("conexion.php"); // conecto

 // 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
?>
Espero quede claro... cualquier comentario hazmelo saber..

Suerte! ... y ponle más empeño...

EDITO:
Aclaro que trabajo con 2 Tablas:
Tabla: usuarios
- id
- usuario
- password
- fecha

Tabla: visitas

- visitante
- hora
- tipo
(no necesito id para este "mi" caso)

y puedes verlo... --- caducado --- . Aunque posiblemente necesites 2 pc's para verlo funcionar
Saludos! ... NO TIENE FORMATO LA PÁGINA A PROPÓSITO, ASÍ QUE NO ME CRITIQUEN
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"

Última edición por jam1138; 05/01/2006 a las 05:03