Foros del Web » Programando para Internet » PHP »

que estoy haciendo mal con las funciones?

Estas en el tema de que estoy haciendo mal con las funciones? en el foro de PHP en Foros del Web. hola, estoy construyendo una clase para ver usuarios online y que actualize si no esta conectado o que si incicia sesion. todoavia estoy bastante verde ...
  #1 (permalink)  
Antiguo 11/04/2012, 09:16
Avatar de ahaugas  
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 249
Antigüedad: 12 años, 8 meses
Puntos: 21
Pregunta que estoy haciendo mal con las funciones?

hola, estoy construyendo una clase para ver usuarios online y que actualize si no esta conectado o que si incicia sesion.

todoavia estoy bastante verde en el tama pero llego a una parte que me salta un error y no se conectar la funcion superior con la de abajo ej:

Código PHP:
class usersOnline {

    function 
usersOnlineConstruct() {
        global 
$db,$db_table_prefix,$loggedInUser;
        if(!
isUserLoggedIn()) { $session "0"; } else { $session "1"; }
        
        
$this->userOnlineTime         5;                                                // Tiempo máximo de espera
        
$this->userOnlineDate         time();                                             // Momento que entra en línea
        
$this->userOnlineIP         $_SERVER['REMOTE_ADDR'];                            // Recuperamos su IP
        
$this->userOnlineLimit         $this->userOnlineDate-$this->userOnlineTime*60;    // Tiempo Limite de espera
        
$this->userOnlineSession    $session;                                            // Vemos si es usuario o invitado
    
return;
    }
    
    function 
usersOnlineDelete() {
    
usersOnlineConstruct();
        
// si se supera el tiempo limite (5 minutos) lo borramos
        
$sql "DELETE FROM ".$db_table_prefix."Users_Online 
                WHERE Date_Time < '"
.$db->sql_escape($this->userOnlineLimit)."'";
                return (
$db->sql_query($sql));
    }

se supone que necesito leer los datos de usersOnlineConstruct() en usersOnlineDelete() pero me tira fallos

alguien me podria hechar una mano porfavor
gracias
  #2 (permalink)  
Antiguo 11/04/2012, 09:29
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: que estoy haciendo mal con las funciones?

Lo que sucede es que estás tratando a los métodos de tu clase como si fueran funciones globales, evidentemente no es así.

Dependiendo del tipo de objeto que utilizas, en tu caso es instanciado, debes llamar a los metodos antecediendo $this-> como con las variables.

Además en tu segundo método estás usando $db como si ya existiera en el contexto de dicho método, lo cual evidentemente no es cierto.

PDTA: por favor, debes documentarte, lee un manual. No puedes ir por ahí andando a ciegas no más.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 11/04/2012, 09:40
Avatar de ahaugas  
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 249
Antigüedad: 12 años, 8 meses
Puntos: 21
Respuesta: que estoy haciendo mal con las funciones?

eso intento aprender, pero aveces con los manuales y ejemplos no sirve por que no entiendo y llego a una parte que me bloqueo, si fuera una sola funcion me sale a la perfeccion pero si intento crear varias funciones dentro de una clase, ya no se como hacerlo porque no quiero utilizar tanto codigo.

me podrias dar alguna pista para documentarme porfavor?

ah y gracias por la respuesta.
  #4 (permalink)  
Antiguo 11/04/2012, 09:46
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: que estoy haciendo mal con las funciones?

El manual oficial de OOP de PHP, desde luego.
http://mx2.php.net/oop
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 11/04/2012, 11:03
Avatar de ahaugas  
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 249
Antigüedad: 12 años, 8 meses
Puntos: 21
Respuesta: que estoy haciendo mal con las funciones?

ok eso ya lo solucione mediante vars, gracias.
ahora tengo un problema con con la comprobacion de datos y actualizarlo.

Código PHP:
Ver original
  1. function usersOnlineSelect() {
  2.         global $db,$db_table_prefix;
  3.         // tomamos todos los usuarios en linea
  4.         $sql = "SELECT * FROM ".$db_table_prefix."Users_Online
  5.                 WHERE User_IP='".$db->sql_escape($this->userOnlineIP)."'";
  6.                 return ($db->sql_query($sql));
  7.     }
  8.    
  9.     function usersOnlineInsert() {
  10.         global $db,$db_table_prefix;
  11.         // Si son los mismo actualizamos la tabla gente_online
  12.         if(mysql_num_rows($sql) != 0) {
  13.         $sql = "UPDATE ".$db_table_prefix."Users_Online
  14.                 SET Date_Time='".$db->sql_escape($this->userOnlineDate)."',
  15.                 User_Session='".$db->sql_escape($this->userOnlineSession)."'
  16.                 WHERE User_IP='".$db->sql_escape($this->userOnlineIP)."'";
  17.                 return ($db->sql_query($sql));
  18.        
  19.         // de lo contrario insertamos los nuevos
  20.         } else {
  21.         $sql = "INSERT INTO `".$db_table_prefix."Users_Online` (
  22.                 `Date_Time`,
  23.                 `User_IP`,
  24.                 `User_Session`
  25.                 )
  26.                 VALUES (
  27.                 '".$db->sql_escape($this->userOnlineDate)."',
  28.                 '".$db->sql_escape($this->userOnlineIP)."',
  29.                 '".$db->sql_escape($this->userOnlineSession)."'
  30.                 )";
  31.                 return $db->sql_query($sql);
  32.         }

ah utilizo los globals porque estan definidas en otro script, si no no funciona, hago la llamada ya definida.

agui el problema esta en al llamarlo de usersOnlineSelect(),

Código PHP:
Ver original
  1. if(mysql_num_rows($sql) != 0) {

se que todavia soy novato, pero ya casi lo tengo y necesitaria info sobre esto
gracias
  #6 (permalink)  
Antiguo 11/04/2012, 11:25
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: que estoy haciendo mal con las funciones?

Ahora tu variable $sql está fuera de contexto, lee lo siguiente:
http://mx2.php.net/manual/es/languag...bles.scope.php
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 11/04/2012, 12:01
Avatar de ahaugas  
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 249
Antigüedad: 12 años, 8 meses
Puntos: 21
Respuesta: que estoy haciendo mal con las funciones?

ok, ya lo he definido pero no he entendido muy bien lo que me querias decir lo ultimo, el manual esta un poco borroso para mi todavia.

y ahora solo me dice que hay un usuario invitado y no me actualiza en la db, seguro que he hecho algo mal.

dejo el la funcion completa ya terminada pero me falla el actualizar.

Código PHP:
Ver original
  1. <?php  
  2.  
  3. class usersOnline {
  4.     var $userOnlineTime;
  5.     var $userOnlineDate;
  6.     var $userOnlineIP;
  7.     var $userOnlineLimit;
  8.     var $userOnlineSession;
  9.     var $usersOnlineUsersSelect;
  10.    
  11.     function usersOnlineConstruct() {
  12.         global $db,$db_table_prefix,$loggedInUser;
  13.         if(!isUserLoggedIn()) { $session = "0"; } else { $session = "1"; }
  14.        
  15.         $this->userOnlineTime       = 5;                                                // Tiempo máximo de espera
  16.         $this->userOnlineDate       = time();                                           // Momento que entra en línea
  17.         $this->userOnlineIP         = $_SERVER['REMOTE_ADDR'];                          // Recuperamos su IP
  18.         $this->userOnlineLimit      = $this->userOnlineDate-$this->userOnlineTime*60;   // Tiempo Limite de espera
  19.         $this->userOnlineSession    = $session;                                         // Vemos si es usuario o invitado
  20.     }
  21.    
  22.     function usersOnlineDelete() {
  23.         global $db,$db_table_prefix;
  24.         // si se supera el tiempo limite (5 minutos) lo borramos
  25.         $sql = "DELETE FROM ".$db_table_prefix."Users_Online
  26.                 WHERE Date_Time < '".$db->sql_escape($this->userOnlineLimit)."'";
  27.                 return ($db->sql_query($sql));
  28.     }
  29.    
  30.     function usersOnlineSelect() {
  31.         global $db,$db_table_prefix;
  32.         // tomamos todos los usuarios en linea
  33.         $sql = "SELECT * FROM ".$db_table_prefix."Users_Online
  34.                 WHERE User_IP='".$db->sql_escape($this->userOnlineIP)."'";
  35.         return ($db->sql_query($sql));
  36.     }
  37.    
  38.     function usersOnlineInsert() {
  39.         global $db,$db_table_prefix;
  40.         $this->usersOnlineUsersSelect = $this->usersOnlineSelect();
  41.         // Si son los mismo actualizamos la tabla gente_online
  42.         if(mysql_num_rows($this->usersOnlineUsersSelect) != 0) {
  43.         $sql = "UPDATE ".$db_table_prefix."Users_Online
  44.                 SET Date_Time='".$db->sql_escape($this->userOnlineDate)."',
  45.                 User_Session='".$db->sql_escape($this->userOnlineSession)."'
  46.                 WHERE User_IP='".$db->sql_escape($this->userOnlineIP)."'";
  47.                 return ($db->sql_query($sql));
  48.        
  49.         // de lo contrario insertamos los nuevos
  50.         } else {
  51.         $sql = "INSERT INTO `".$db_table_prefix."Users_Online` (
  52.                 `Date_Time`,
  53.                 `User_IP`,
  54.                 `User_Session`
  55.                 )
  56.                 VALUES (
  57.                 '".$db->sql_escape($this->userOnlineDate)."',
  58.                 '".$db->sql_escape($this->userOnlineIP)."',
  59.                 '".$db->sql_escape($this->userOnlineSession)."'
  60.                 )";
  61.                 return $db->sql_query($sql);
  62.         }
  63.     }
  64.        
  65.        
  66.        
  67.     function usersOnlineView() {   
  68.         global $db,$db_table_prefix;
  69.        
  70.         // Seleccionamos toda la tabla
  71.         $query = "SELECT * FROM ".$db_table_prefix."Users_Online";
  72.         $resp = @mysql_query($query) or die(mysql_error());
  73.         $usuarios = mysql_num_rows($resp);
  74.        
  75.         //Usuarios no registrados
  76.         $query = "SELECT * FROM ".$db_table_prefix."Users_Online WHERE User_Session='0'";
  77.         $resp = @mysql_query($query) or die(mysql_error());
  78.         $noregistrados = mysql_num_rows($resp);
  79.        
  80.         //Usuarios registrados
  81.         $query = "SELECT * FROM ".$db_table_prefix."Users_Online WHERE User_Session='1'";
  82.         $resp = @mysql_query($query) or die(mysql_error());
  83.         $registrados = mysql_num_rows($resp);
  84.  
  85.         // Si hay 1 usuarios se muestra en singular; si hay más de uno, en plural
  86.         if($usuarios > 1 || $usuarios == 0){ echo("Hay "); } else { echo("Hay "); }
  87.         if($usuarios == 0){ echo("no "); } else { echo($usuarios." "); }
  88.         if($usuarios > 1 || $usuarios == 0){ echo("usuarios en línea."); } else { echo("usuario en línea."); }
  89.         echo '<br />';
  90.         echo 'Invitados: '.$noregistrados.'';
  91.         echo '<br />';
  92.         echo 'Usuarios: '.$registrados.'';
  93.     }
  94. }  
  95.     //View userCake users online
  96.     $viewUsersOnline = new usersOnline();
  97.     $viewUsersOnline->usersOnlineConstruct();
  98.     $viewUsersOnline->usersOnlineDelete();
  99.     $viewUsersOnline->usersOnlineSelect();
  100.     $viewUsersOnline->usersOnlineInsert();
  101. ?>
gracias por toda la ayuda, he avanzado un poquitin jejeje pero me doy cuanta de mas cosas

Etiquetas: haciendo, sql, usuarios
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 19:20.