Foros del Web » Programando para Internet » PHP »

Quién está en linea

Estas en el tema de Quién está en linea en el foro de PHP en Foros del Web. Hola a todos... De a poco, por mis escasos conocimientos, estoy intentado hacer el script que me muestre los usuarios activos y demás. Estoy juntando ...
  #1 (permalink)  
Antiguo 01/03/2010, 09:18
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Quién está en linea

Hola a todos...

De a poco, por mis escasos conocimientos, estoy intentado hacer el script que me muestre los usuarios activos y demás.
Estoy juntando y aprendiendo de ejemplos, pero sin lugar a dudas es necesarios recurrir a las ayudas.

Ya nomás en el conmienzo tengo problemas que me rompen la cabeza por que no encuentro el fallo:

Aquí lo echo hasta ahora:

Código:
La tabla "enlinea":

CREATE TABLE enlinea (
   usuario varchar(250) NOT NULL default '',
   ip int(11) NOT NULL default '0',
   fecha int(11) NOT NULL default '0',
   PRIMARY KEY  (usuario)
) TYPE=MyISAM;
Código PHP:
<?php
session_start
();

//Conexión a la base de datos
          
include($_SERVER['DOCUMENT_ROOT']."/conectarse.php");
          
conectarse();

$fecha time() ; 
$ip $REMOTE_ADDR 
$usuario $_SESSION['user'] ;

function 
enlinea(){
if(
$_SESSION['user']) { 
$query mysql_query("SELECT * FROM enlinea WHERE usuario = '$usuario'") ; 
if(
mysql_num_rows($query) == 0) { 
mysql_query("INSERT INTO enlinea (usuario, ip, fecha) VALUES ('$usuario', '$ip',
 '$fecha')"
) or die(mysql_error()); 

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

}   
}
?>
Pero NO me está guardando los datos en la tabla!
  #2 (permalink)  
Antiguo 01/03/2010, 10:06
Avatar de juamd  
Fecha de Ingreso: marzo-2009
Ubicación: Bogotá
Mensajes: 285
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Quién está en linea

Que tal !!!

Ya verificaste que antes de ejecutar la consulta las variables tengas datos ? pues segun la estructura de la tabla no permites campos nulos.

Saludos.
  #3 (permalink)  
Antiguo 01/03/2010, 10:17
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Respuesta: Quién está en linea

Hola juamd...

No entiendo bien tu pregunta. Teoricamente si no hay datos tiene que escribirlos cuando hago este "if"!

Código PHP:
if(mysql_num_rows($query) == 0) { 
mysql_query("INSERT INTO enlinea (usuario, ip, fecha) VALUES ('$usuario', '$ip',
 '$fecha')"
) or die(mysql_error()); 

  #4 (permalink)  
Antiguo 01/03/2010, 10:47
Avatar de juamd  
Fecha de Ingreso: marzo-2009
Ubicación: Bogotá
Mensajes: 285
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Quién está en linea

Me refiero a que antes de ejecutar el insert verifiques que todas las variables involucradas (usuario, ip y fecha) tengan datos. Depronto hay alguna que no está haciendo lo que debe.

saludos.
  #5 (permalink)  
Antiguo 01/03/2010, 10:52
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Respuesta: Quién está en linea

Sí, las variables tienen valores, para verificarlo en el script pongo esto y me imprime los datos!

Código PHP:
<?php
echo $usuario;
echo 
"<br />";
echo 
$ip ;
echo 
"<br />";
echo 
$fecha ;
?>
  #6 (permalink)  
Antiguo 02/03/2010, 11:51
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Respuesta: Quién está en linea

Antes que nada, me olvidé de comentar al inicio del post que, fundamentalmente me guié para hacer esto con este post.

Bueno, al parecer el problema de que no guardaba datos en la tabla era por el campo "ip int(11) NOT NULL default '0';", que comprobando da error de "Data truncated for column 'ip' at row '1'"

Por lo tanto, cambié la tabla y la dejé así:

Código:
CREATE TABLE `enlinea` (
  `ip` varchar(32) NOT NULL default '0',
  `usuario` varchar(32) NOT NULL default '0',
  `fecha` int(11) NOT NULL default '0',
  `tipo` varchar(32) NOT NULL default '0',
  PRIMARY KEY  (`usuario`)
) ENGINE=MyISAM;
Cambié el PRIMARY KEY a "usuario" por unos problemitas que lñuego explico.

La "function" quedó así:

Código PHP:
<?php
session_start
();

//Conexión a la base de datos
          
include($_SERVER['DOCUMENT_ROOT']."/conectarse.php");
          
conectarse();

if(!
function_exists("enlinea")){
function 
enlinea(){

global 
$pagina$get;

$fecha time() ; 
$tiempo 
$tiempo $fecha-$tiempo*60 
$ip $_SERVER['REMOTE_ADDR'] ; 
$usuario $_SESSION['user'] ;
 
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(
$_SESSION['user']) { 
$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'") ; 


}
}
?>
Y con este script podemos comprobar el funcionamiento

Código PHP:
<?php
//Conexión a la base de datos
          
include($_SERVER['DOCUMENT_ROOT']."/conectarse.php");
          
conectarse();

global 
$pagina$get;

/* 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>";

$query = @mysql_query("SELECT * FROM enlinea WHERE tipo = 'usuario'");
while(
$datos = @mysql_fetch_array($query)){
echo 
"| <a href='".$pagina."?".$get."=registrados&u=".$datos[id]."'>".$datos[usuario]."</a> | \n";
}
?>
ESTA FUNCIONANDO! pero hay que pulir algunas cosas...

Sigo trabajando y haciendo pruebas... recordar que tengo pocos conocimientos, si alguien sugiere o corrige vienvenido sea!!!

Etiquetas: linea
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:30.