Foros del Web » Programando para Internet » PHP »

Usuarios registrados (jpinedo)

Estas en el tema de Usuarios registrados (jpinedo) en el foro de PHP en Foros del Web. Buenos días: Ante todo comentar que estoy usando el Autentificator de Cluster y me funciona correctamente. He visto por el foro la propuesta de jpinedo ...
  #1 (permalink)  
Antiguo 03/02/2005, 01:24
 
Fecha de Ingreso: septiembre-2003
Mensajes: 47
Antigüedad: 20 años, 7 meses
Puntos: 0
Usuarios registrados (jpinedo)

Buenos días:
Ante todo comentar que estoy usando el Autentificator de Cluster y me funciona correctamente. He visto por el foro la propuesta de jpinedo y estoy practicando con ella. Él comenta que funciona correctamente con la aplicación de Cluster modificando las variables de sesion $_SESSION['usuario_nombre'] por $_SESSION['usuario_login']. Seguramente algo habré hecho mal ya que me parece que algo no me cuadra.

En primer lugar creé una tabla llamada sesiones con estos datos:

Cita:
CREATE TABLE sesiones (
usuario_nombre varchar(25) NOT NULL,
tiempo varchar(14) NOT NULL,
invitado int(1) NOT NULL
);
Seguidamente la conexión a la base de datos con el archivo info.php:

Código PHP:
<?php 
$servidor
="localhost"
$usuario="*********"
$password="********"
$base="*********"
$con mysql_connect($servidor,$usuario,$password) or die ("Error en la conexión con BD ".mysql_error()); 
mysql_select_db($base,$con) or die ("Error al seleccionar BD ".mysql_error()); 
?>
A continuación la función tal y como yo la tengo llamada online.php:

Código PHP:
<? 
function online(){ 
    if (!isset(
$_SESSION['usuario_login'])){ 
        
$usuario_nombre $_SERVER['REMOTE_ADDR']; 
        
$invitado 1
    }else{ 
        
$usuario_nombre $_SESSION['usuario_login']; 
        
$invitado 0
    } 
    include (
"info.php"); 
    
$pasado time()-300;//900 segundos. Cambiar por el plazo que se quiera dar al usuario para realizar alguna acción (recargar por ejemplo). 
    
$sql "DELETE FROM sesiones WHERE tiempo < $pasado"
    
mysql_query($sql); 
    
$sql "SELECT tiempo FROM sesiones WHERE usuario_nombre='$usuario_nombre'"
    
$result mysql_query($sql) or die ("Error en función online (leer) :".mysql_error()); 
    
$tiempo time(); 
    if (
mysql_num_rows($result) == 1){ 
        
$sql "UPDATE sesiones SET usuario_nombre='$usuario_nombre', tiempo='$tiempo', invitado='$invitado' WHERE usuario_nombre='$usuario_nombre'"
    }else{ 
        
$sql "INSERT INTO sesiones (usuario_nombre, tiempo, invitado) VALUES ('$usuario_nombre', '$tiempo', '$invitado')"
    } 
    
mysql_query($sql) or die("Error en función online (actualizar) :".mysql_error); 

?>
En cada página el include a online.php

Código PHP:
include ("online.php"); 
online() 
Y aquí visualizo el resultado:

Código PHP:
<? 
include ("info.php");//conexión con BD 
$sql "SELECT usuario_nombre FROM sesiones WHERE invitado=0"
$result mysql_query($sql); 
$total_registrados mysql_num_rows($result); 
echo 
"En línea:<br />"
echo 
"Usuaris registrats: ".$total_registrados."<br />"
while (
$row mysql_fetch_array($result)){ 
    echo 
$row['usuario_nombre']."<br />"


$sql "SELECT * FROM sesiones WHERE invitado=1"
$result mysql_query($sql); 
$total_invitados mysql_num_rows($result); 
echo 
"Invitats: ".$total_invitados."<br />"
echo 
"Total usuaris en línea: ".($total_invitados $total_registrados)."<br />";
?>
Así es como lo tengo. Alomejor no hacía falta crear otra tabla y hacer uso de la de Cluster añadiendo los campos necesarios. Volviendo a lo de arriba, observo que quizás cualquier acceso a la página será contabilizado dos veces; uno al ser invitado en un principio, y dos al acceder como usuario registrado. No sé que deciros. Agradecería cualquier aclaración y rectificar si tengo alguna que esté mal.

Saludos y gracias
  #2 (permalink)  
Antiguo 03/02/2005, 01:52
 
Fecha de Ingreso: abril-2004
Mensajes: 44
Antigüedad: 20 años
Puntos: 1
No sé cual es exactamente tu problema o lo que no te sale, pero uno de los errores puede ser que cuando defines las sentencias de consulta a la BD, no concatenas bien las variables php con el string. Es decir:
Tu pones:
$sql = "DELETE FROM sesiones WHERE tiempo < $pasado";
$sql = "SELECT tiempo FROM sesiones WHERE usuario_nombre=' $usuario_nombre'";
Cuando deberías poner:
$sql = "DELETE FROM sesiones WHERE tiempo < ".$pasado.";
$sql = "SELECT tiempo FROM sesiones WHERE usuario_nombre='".$usuario_nombre."'";

Las concatenaciones solo hay que hacerlas con las variables, con los valores literales, no. No se si esto te servirá de algo, pero espero que si.

Saludos.
__________________
sometimes, I feel I should go and play with the thunder
  #3 (permalink)  
Antiguo 04/02/2005, 00:23
 
Fecha de Ingreso: septiembre-2003
Mensajes: 47
Antigüedad: 20 años, 7 meses
Puntos: 0
No funciona

Hola bilbo e

Ante todo gracias por tu aportación.

He rectificado lo que dices

Código PHP:
$sql "DELETE FROM sesiones WHERE tiempo < ".$pasado.";
$sql = "
SELECT tiempo FROM sesiones WHERE usuario_nombre='".$usuario_nombre."'"; 
y me da este error:

Cita:
Parse error: parse error, unexpected T_STRING in /usr/home/domain/www/online.php on line 14
Gracias
  #4 (permalink)  
Antiguo 04/02/2005, 01:35
 
Fecha de Ingreso: abril-2004
Mensajes: 44
Antigüedad: 20 años
Puntos: 1
Los siento, puse unas comillas de más...

En realidad debería ser así...
Código PHP:
$sql "DELETE FROM sesiones WHERE tiempo < ".$pasado
$sql "SELECT tiempo FROM sesiones WHERE usuario_nombre='".$usuario_nombre."'"
De la forma que te lo puse antes, indicaba que después de las variable $pasado se concatenaba otro string, y claro, el siguiente string que encontraba era todo lo que había por detras del punto-comilla.

Espero que así vaya bien
__________________
sometimes, I feel I should go and play with the thunder
  #5 (permalink)  
Antiguo 05/02/2005, 14:17
 
Fecha de Ingreso: septiembre-2003
Mensajes: 47
Antigüedad: 20 años, 7 meses
Puntos: 0
Hola bilbo_e:

Bueno en principio no produce ningún error. Lo estudiaré con más usuarios en línea y funcionando todo para darlo por Ok. Si hay alguna cosa os lo comunico.

Gracias por todo y BUEN CARNAVAL
  #6 (permalink)  
Antiguo 05/02/2005, 15:38
 
Fecha de Ingreso: febrero-2004
Mensajes: 221
Antigüedad: 20 años, 2 meses
Puntos: 0
Bilbo Bolson, de Bolson Cerrado?
  #7 (permalink)  
Antiguo 07/02/2005, 05:55
 
Fecha de Ingreso: abril-2004
Mensajes: 44
Antigüedad: 20 años
Puntos: 1
No, por mi apellido y mi ciudad. Bilbao, solo que en euskera se dice Bilbo
__________________
sometimes, I feel I should go and play with the thunder
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 05:00.