Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Problema con herencia de un metodo. en PHP se cuelga en 1 funcion

Estas en el tema de Problema con herencia de un metodo. en PHP se cuelga en 1 funcion en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola la clase me devuelve ROW LEVEL-> ERROR que le digo que devuelva en el metodo. Cita: el asunto es que no puedo crear la ...
  #1 (permalink)  
Antiguo 18/06/2009, 01:59
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 17 años, 2 meses
Puntos: 25
Problema con herencia de un metodo. en PHP se cuelga en 1 funcion

Hola la clase me devuelve ROW LEVEL-> ERROR que le digo que devuelva en el metodo.

Cita:
el asunto es que no puedo crear la sesion con el valor del ID de la consulta
como veran estoy haciendo herencia de la clase clase_db y no anda :(

"""""""""""""""

// funcion para contar el total de tablas de una consulta
public function contar_tablas(){

return mysql_num_rows($this->id_consulta) or die('ROW LEVEL->'.mysql_error());
}


"""""""""""""""

No tengo ni idea le he dado muchas vuelvas al asunto y nada espero su ayuda gracias.

Código PHP:

<?php
  
// llamo la clase de configuracion de la base de datos
 //include('db.class.php');
   
   
   
   //////////////////////////////
   
   
    
class clase_db {
    
   public  
$id_consulta "";
   public  
$id_conexion "";
   
   
// constructor
   
public function __construct(){
   
     
$this->servidor    'localhost';
    
$this->usuario     'root';
    
$this->clave       '252245';
    
$this->basedatos   'db_aplicacion';

    
// me conecto
    
$this->id_conexion mysql_connect($this->servidor,$this->usuario,$this->clave);
    
mysql_select_db($this->basedatos);
    
  }
  
   
    
// funcion para realizar una consulta Sql
   
public function sql($sql){
   
    return 
$this->id_consulta mysql_query($sql) or die('QUERY LEVEL->'.mysql_error());  
   
   }  
   
   
// funcion para contar el total de tablas de una consulta
   
public function contar_tablas(){
     
     return 
mysql_num_rows($this->id_consulta) or die('ROW LEVEL->'.mysql_error());
   }
   
   
// funcion para retornar los datos en un vector
   
public function array_query(){
   
    return 
mysql_fetch_array($this->id_consulta) or die('ARRAY LEVEL->'.mysql_error());
       
   }
   
 
   
   
// Limpiar toda la basura del usuario
   
   
public function limpi($str){
     
      
$str addslashes($str);
      
$str htmlentities($str);
      
$str trim($str);
      return 
$str;
   
   }
   
   
// funcion para desconectarnos del servidor
   
public function desconectar(){
   
    return 
mysql_close($this->id_conexion);
   
   }

}
   
   
   
///////////////////////////////
   
   
   
  // uso los metodos de la clase [clase_db) 
  
class clase_clientes extends clase_db {
  
   public 
$id_cliente;
   public 
$nombre;
   public 
$apellido;
   public 
$email;
   public 
$clave;
   public 
$telefono;
   public 
$fecha_nacimiento;
   public 
$fecha_registrado;
   
   
      
   
// iniciar sesion del cliente
   
public function login_cliente($email,$clave){
    

       
$email $this->limpi($email);
       
$clave $this->limpi($clave);
       
     
// $clave = md5($clave);
      
      
$sql   "SELECT id_cliente_datos 
                FROM cliente_datos 
                WHERE email='$email' 
                AND clave='$clave'"

                
                
// hago consulta
       
$this->sql($sql);
  
      if(
$this->contar_tablas() >0){
         
         
session_start();
         
         
$datos $this->array_query();
         
$_SESSION['id_cliente_datos'] = $datos['id_cliente_datos'];
         
         
$this->desconectar();
         
         return 
true;      
      }
      
      else {
       
       return 
false;
      
      }
      
   
   }   
  
  
// fin clase  
  
}   
  
  
// ejemplo
  
$db      = new clase_db;
  
$cliente = new clase_clientes;
  
  
$cliente->login_cliente('[email protected]','caracas');
  

  
   
?>
__________________
O nos hacemos miserables o nos hacemos fuertes , la cantidad de trabajo es la misma.

Última edición por eddwinpaz; 18/06/2009 a las 02:20
  #2 (permalink)  
Antiguo 18/06/2009, 02:20
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 5 meses
Puntos: 102
Respuesta: Problema con herencia de un metodo. en PHP se cuelga en 1 funcion

Mensajes de error exactos. Tu mensaje lo concatenas con lo que regresa mysql_error(), ¿qué te muestra?.

Por encima, creo tu problema es que no estás sobreescribiendo el constructor en tu clase hija.

Código php:
Ver original
  1. class ClaseHija extends ClasePadre
  2. {
  3.     public function __construct()
  4.     {
  5.         parent::__construct();
  6.     }
  7. }

www.php.net/construct



Edito: ... y no necesitas instanciar la clase clase_db, ni siquiera lo estás ocupando ...
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #3 (permalink)  
Antiguo 18/06/2009, 10:12
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 17 años, 2 meses
Puntos: 25
Respuesta: Problema con herencia de un metodo. en PHP se cuelga en 1 funcion

Cita:
Iniciado por jam1138 Ver Mensaje
Mensajes de error exactos. Tu mensaje lo concatenas con lo que regresa mysql_error(), ¿qué te muestra?.

Por encima, creo tu problema es que no estás sobreescribiendo el constructor en tu clase hija.

Código php:
Ver original
  1. class ClaseHija extends ClasePadre
  2. {
  3.     public function __construct()
  4.     {
  5.         parent::__construct();
  6.     }
  7. }

www.php.net/construct



Edito: ... y no necesitas instanciar la clase clase_db, ni siquiera lo estás ocupando ...
hice lo que me comentas. y la verdad ahora me da el siguiente error.

Cita:
PHP Parse error: syntax error, unexpected T_STRING, expecting T_FUNCTION in C:\Zend\Apache2\htdocs\site\clientes.class.php on line 90
__________________
O nos hacemos miserables o nos hacemos fuertes , la cantidad de trabajo es la misma.
  #4 (permalink)  
Antiguo 18/06/2009, 10:27
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 7 meses
Puntos: 2135
Respuesta: Problema con herencia de un metodo. en PHP se cuelga en 1 funcion

¿Que es lo que tienes en las lineas 88 a 92?

Saludos.
  #5 (permalink)  
Antiguo 18/06/2009, 10:29
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 17 años, 2 meses
Puntos: 25
Respuesta: Problema con herencia de un metodo. en PHP se cuelga en 1 funcion

Cita:
Iniciado por GatorV Ver Mensaje
¿Que es lo que tienes en las lineas 88 a 92?

Saludos.
Tengo esto

88 a 92

public function login_cliente($email,$clave){


$email = $this->limpi($email);
$clave = $this->limpi($clave);
__________________
O nos hacemos miserables o nos hacemos fuertes , la cantidad de trabajo es la misma.
  #6 (permalink)  
Antiguo 18/06/2009, 11:16
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 5 meses
Puntos: 102
Respuesta: Problema con herencia de un metodo. en PHP se cuelga en 1 funcion

Es un error de sintaxis, no deberías tener problemas con ello.

En la parte de código que colocas, no veo error ... ¿fue un copy&paste o re-escribiste?; chécalo. Si no lo localizas muestra toda tu clase para ver cómo quedó.

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #7 (permalink)  
Antiguo 18/06/2009, 11:29
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 17 años, 2 meses
Puntos: 25
Respuesta: Problema con herencia de un metodo. en PHP se cuelga en 1 funcion

la clase la hice yo desde cero :P

aqui esta la clase completa son 2 clases separadas pero las coloco ahora en 1 solo documento

Código php:
Ver original
  1. <?php
  2.   // llamo la clase de configuracion de la base de datos
  3.   // include('db.class.php');
  4.  
  5.     class clase_db {
  6.    
  7.    public  $id_consulta = "";
  8.    public  $id_conexion = "";
  9.    
  10.    // constructor
  11.    public function __construct(){
  12.    
  13.     $this->servidor    = 'localhost';
  14.     $this->usuario     = 'root';
  15.     $this->clave       = '252245';
  16.     $this->basedatos   = 'db_aplicacion';
  17.  
  18.     // me conecto
  19.     $this->id_conexion = mysql_connect($this->servidor,$this->usuario,$this->clave);
  20.     mysql_select_db($this->basedatos);
  21.    
  22.   }
  23.  
  24.    
  25.     // funcion para realizar una consulta Sql
  26.    public function sql($sql){
  27.    
  28.     return $this->id_consulta = mysql_query($sql) or die('QUERY LEVEL->'.mysql_error());  
  29.    
  30.    }  
  31.    
  32.    // funcion para contar el total de tablas de una consulta
  33.    public function contar_tablas(){
  34.      
  35.      return mysql_num_rows($this->id_consulta) or die('ROW LEVEL->'.mysql_error());
  36.    }
  37.    
  38.    // funcion para retornar los datos en un vector
  39.    public function array_query(){
  40.    
  41.     return mysql_fetch_array($this->id_consulta) or die('ARRAY LEVEL->'.mysql_error());
  42.        
  43.    }
  44.    
  45.  
  46.    
  47.    // Limpiar toda la basura del usuario
  48.    
  49.    public function limpi($str){
  50.      
  51.       $str = addslashes($str);
  52.       $str = htmlentities($str);
  53.       $str = trim($str);
  54.       return $str;
  55.    
  56.    }
  57.    
  58.    // funcion para desconectarnos del servidor
  59.    public function desconectar(){
  60.    
  61.     return mysql_close($this->id_conexion);
  62.    
  63.    }
  64.  
  65. }
  66.  
  67.   // uso los metodos de la clase [clase_db)
  68.   class clase_clientes extends clase_db {
  69.  
  70.    public $id_cliente;
  71.    public $nombre;
  72.    public $apellido;
  73.    public $email;
  74.    public $clave;
  75.    public $telefono;
  76.    public $fecha_nacimiento;
  77.    public $fecha_registrado;
  78.    
  79.    
  80.  
  81.    public function __construct(){
  82.  
  83.         parent::__construct();
  84.  
  85.    }
  86.    
  87.    // iniciar sesion del cliente
  88.     public function login_cliente($email,$clave){
  89.    
  90.  
  91.        $email = $this->limpi($email);
  92.        $clave = $this->limpi($clave);
  93.        
  94.      // $clave = md5($clave);
  95.      
  96.       $sql   = "SELECT id_cliente_datos
  97.                FROM cliente_datos
  98.                WHERE email='$email'
  99.                AND clave='$clave'";
  100.                
  101.                 // hago consulta
  102.        $this->sql($sql);
  103.  
  104.       if($this->contar_tablas() >0){
  105.          
  106.          session_start();
  107.          
  108.          $datos = $this->array_query();
  109.          $_SESSION['id_cliente_datos'] = $datos['id_cliente_datos'];
  110.          
  111.          $this->desconectar();
  112.          
  113.          return true;      
  114.       }
  115.      
  116.       else {
  117.        
  118.        return false;
  119.      
  120.       }
  121.  
  122.  
  123. // fin clase  
  124.   }  
  125.  
  126.   // ejemplo
  127.   $cliente = new clase_clientes;  
  128.   $cliente->login_cliente('[email protected]','caracas');
  129.  
  130.  
  131.  
  132.    
  133. ?>
__________________
O nos hacemos miserables o nos hacemos fuertes , la cantidad de trabajo es la misma.
  #8 (permalink)  
Antiguo 18/06/2009, 11:41
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 17 años, 2 meses
Puntos: 25
Respuesta: Problema con herencia de un metodo. en PHP se cuelga en 1 funcion

Ahora me dice..
[18-Jun-2009 13:41:06] PHP Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION in C:\Zend\Apache2\htdocs\tunuevallave\clientes.class .php on line 127
__________________
O nos hacemos miserables o nos hacemos fuertes , la cantidad de trabajo es la misma.
  #9 (permalink)  
Antiguo 18/06/2009, 11:46
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 5 meses
Puntos: 102
Respuesta: Problema con herencia de un metodo. en PHP se cuelga en 1 funcion

De rápido ...
Línea 120, claramente se ve es la llave de cierre del else en la línea 116, entonces línea 124 será la de la función el método... ¿dónde se cierra la clase?.

Insisto, errores de sintaxis es lo menos que se debería tener. Un buen editor con reconocimiento del lenguaje debería ayudarte marcándote esos errores...

Igual ahora alcancé a observar que en el constructor de tu clase padre estás asignado valores a propiedades no definidas ($this->usuario sin haber antes un public $usuario).


__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #10 (permalink)  
Antiguo 18/06/2009, 11:54
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 7 meses
Puntos: 2135
Respuesta: Problema con herencia de un metodo. en PHP se cuelga en 1 funcion

Sin contar que tus variables no deberían ser public, deberían ser private o protected para proteger el encapsulamiento.

Saludos.
  #11 (permalink)  
Antiguo 18/06/2009, 12:22
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 17 años, 2 meses
Puntos: 25
Presento nuevamente el problema
no entiendo por que me devuelve ROW LEVEL->

Cuando quiero saber el total de tablas de una consulta.
Gracias nuevamente.

clase_db
Código PHP:

<?

  
class clase_db {
    
   private  
$id_consulta "";
   private  
$id_conexion "";
   private  
$servidor ="";
   private  
$usuario ="";
   private  
$clave ="";
   private  
$basedatos ="";
   
   
// constructor
   
public function __construct(){
   
     
$this->servidor    'localhost';
    
$this->usuario     'root';
    
$this->clave       '252245';
    
$this->basedatos   'db_aplicacion';

    
// me conecto
    
$this->id_conexion mysql_connect($this->servidor,$this->usuario,$this->clave);
    
mysql_select_db($this->basedatos);
    
  }
  
   
    
// funcion para realizar una consulta Sql
   
public function sql($sql){
   
    return 
$this->id_consulta mysql_query($sql) or die('QUERY LEVEL->'.mysql_error());  
   
   }  
   
   
// funcion para contar el total de tablas de una consulta
   
public function contar_tablas(){
     
     return 
mysql_num_rows($this->id_consulta) or die('ROW LEVEL->'.mysql_error());
   }
   
   
// funcion para retornar los datos en un vector
   
public function array_query(){
   
    return 
mysql_fetch_array($this->id_consulta) or die('ARRAY LEVEL->'.mysql_error());
       
   }
   
 
   
   
// Limpiar toda la basura del usuario
   
 
public function limpiar($str){
     
      
$str .= addslashes($str);
      
$str .= htmlentities($str);
      
$str .= trim($str);
      return 
$str;
   
   } 
   
   
// funcion para desconectarnos del servidor
   
public function desconectar(){
   
    return 
mysql_close($this->id_conexion);
   
   }

}
   
?>
clase_cliente / ESTA HACE USO DE LA CLASE DE ARRIBA LLAMADA CLASE_DB
Código PHP:
  
<?php
  
// llamo la clase de configuracion de la base de datos
  
include('db.class.php');
  
   class 
clase_cliente extends clase_db {

    private 
$nombre;
    private 
$apellido;
    private 
$email;
    private 
$clave;
    private 
$id_cliente_datos;
    private 
$datos;

    function  
__construct(){

        
parent::__construct();
    }

   
// inciamos sesion del usuario
   
public function login_cliente($email,$clave){

     
$this->sql("SELECT id_cliente_datos FROM cliente_datos WHERE email='$email' AND clave='$clave'");

       if(
$this->contar_tablas() >0){

           
$datos $this->array_query();
           
session_start();
           
$_SESSION['id_cliente_datos'] = $datos['id_cliente_datos'];
           
$this->desconectar();
           return 
true;
       }

       else {
           return 
false;
       }
  
    }
    
}

 
  
$cliente = new clase_cliente;
  
$cliente->login_cliente('[email protected]','252245');
   
?>
sera que tengo que crear una conexion ? a la base de datos ? no creo por que ya estoy haciendo eso en el constructor. :( no tengo ni idea ando trabado hay.. Solo necesito devolver un true y la sesion registrada y un false en caso de error para poder mostrar el error al usuario. a la hora de entrar.
__________________
O nos hacemos miserables o nos hacemos fuertes , la cantidad de trabajo es la misma.

Última edición por jam1138; 18/06/2009 a las 12:51
  #12 (permalink)  
Antiguo 18/06/2009, 14:10
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 7 meses
Puntos: 2135
Respuesta: Problema con herencia de un metodo. en PHP se cuelga en 1 funcion

El problema (que ya habia sido tratado antes) es que asignas y evaluas en la misma función lo cual hace el debug más complicado:
Código php:
Ver original
  1. public function sql($sql){
  2.     $this->id_consulta = mysql_query($sql);
  3.     if (!$this->id_consulta) {
  4.             throw new Exception(mysql_error());
  5.     }
  6.    }

Saludos.
  #13 (permalink)  
Antiguo 18/06/2009, 14:14
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 17 años, 2 meses
Puntos: 25
@GatorV bueno la verdad es que ninguna de esas soluciones me a funcionado para resolver mi problema. y recibo amonestaciones francamente absurdas.. es un foro. no la embajada de los estados unidos.

ya encontre la solucion. estaba muy sencilla. no se como se volvieron un 8 en ese problemita que XDebug no pueda encontrar.

Pongo en duda el conocimiento de algunas personas.

la solucion fue simplemente quitar los warnings de los metodos.
__________________
O nos hacemos miserables o nos hacemos fuertes , la cantidad de trabajo es la misma.

Última edición por GatorV; 18/06/2009 a las 14:42
  #14 (permalink)  
Antiguo 18/06/2009, 14:46
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 7 meses
Puntos: 2135
Respuesta: Problema con herencia de un metodo. en PHP se cuelga en 1 funcion

Pues un problema puede ser que el or die() se ejecuta cuando la condición es falsa, por lo que te digo no es bueno evaluar y asignar es mejor tener un control de flujo.

Si mysql_num_rows te devuelve 0, PHP lo interpreta como falso y por ende se va al or die(), si hubieras visto el manual (mysql_num_rows) antes de estarte quejando por el foro hubieras podido ver el error.

Saludos.
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 02:02.