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

Ayuda con mi clase

Estas en el tema de Ayuda con mi clase en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Saludos: Esta es una clase que yo hice y la eh venido usando sin problemas, pero en esto último que estoy haciendo tengo problemas y ...
  #1 (permalink)  
Antiguo 22/01/2009, 16:01
 
Fecha de Ingreso: mayo-2003
Ubicación: Lima
Mensajes: 967
Antigüedad: 20 años, 11 meses
Puntos: 8
Ayuda con mi clase

Saludos:

Esta es una clase que yo hice y la eh venido usando sin problemas, pero en esto último que estoy haciendo tengo problemas y no se porque.

La clase es esta:
Código PHP:
require("global.php");

class 
DB
{
    private 
$con;
    private 
$pInicio;
    private 
$pLogin;
    private 
$pRegistro;
    private 
$pSalir;
    private 
$MsgError;
    
     private function 
Conectar()
    {
        
$this->con mysql_connect(HOSTUSPW) or die("Error de conexión al servidor.");
        
mysql_select_db(DBASE$this->con) or die("Error al conectar con la base de datos.");
    }
    
    public function 
__contruct()
    {
        
$this->pInicio PAGINA_INICIO;
        
$this->pLogin PAGINA_LOGIN;
        
$this->pRegistro PAGINA_REGISTRO;
        
$this->pSalir PAGINA_SALIR;
        
$this->Conectar();
    }
    
    public function 
NumeroFilas($rs)    
    {
        if (!
$rs) {
            echo 
"La consulta no es válida, no se puede extraer el número de filas.";
        }
        else {
            return 
mysql_num_rows($rs);
        }
    }
    
    public function 
NumeroCampos($rs)
    {
        if (!
$rs) {
            echo 
"La consulta no es válida, no se puede extraer el nñumero de campos.";
        }
        else {
            return 
mysql_num_fields($rs);
        }
    }
    
    public function 
Consulta($sql)
    {
        if (empty(
$sql)) {
            echo 
"La sentencia SQL no es válida.";
        }
        else {
            return 
mysql_query($sql$this->con);
        }
    }
    
    public function 
DevolverFilasConsulta($rs)
    {
        if (
$rs) {
            return 
mysql_fetch_object($rs);
        }
        else {
            echo 
"El parametro para devolver el resultado no es válido.";
        }
    }
    
    public function 
VerificarSession()
    {
        if (!isset(
$_SESSION["us"])) {
            
session_unset();
            
session_destroy();
        }
    }
    
    public function 
MostrarLogin()
    {
        
$muestra "";
        
        if (isset(
$_SESSION["us"])) {
            
$muestra "Bienvenido(a) " $_SESSION["us"];
            
$muestra .= " | " "<a href = '" $this->pSalir "'>Salir</a>";
            echo 
$muestra;
        }
        else {
            include(
"php/minilogo.php");
        }
    }
    
    private function 
Salir()
    {
        
session_unset();
        
session_destroy();
        
        
$out "<script type = 'text/javascript'>";
        
$out .= "location.href = " $this->pInicio;
        
$out .= "</script>";
    }
    
    public function 
Logearse($usuario$clave)
    {
        
$rs $this->Consulta("SELECT * FROM " TABLA_USUARIOS " WHERE us_name = '" $usuario "' AND us_clave = '" $clave ."'");
        
$result = ($this->NumeroFilas($rs)) ? 0;
        
        if (
$result == 1) {
            
$_SESSION["us"] = $usuario;
        }
        
        
header("Location: " $this->pInicio);
    }
    
    public function 
MostrarCuadroCategorias()
    {
        echo 
"<span class='titlecarritoinfo'>Busque por categoría</span>";
        echo 
"<p>";
            echo 
"Seleccione una categoría<br />";
            echo 
"<select name='categorias' id='categorias' class='selectwidth' onchange='javascript:cargarSubcategorias();'>";
            echo 
"<option value=''>[ Seleccione ]</option>";
            
$rs $this->Consulta("SELECT * FROM categorias ORDER BY cat_des");
            while (
$ob $this->DevolverFilasConsulta($rs)) {
                echo 
"<option value=".$ob->cat_id.">".$ob->cat_des."</option>";
            }
        echo 
"</p>";
        echo 
"<div id='subcategorias'></div>";
    }

Así la llamo en la pagina:
Código PHP:
session_start();
require(
"php/global/db.class.php");
$inicl = new DB(); 
Y aquí la uso:
Código PHP:
$str "SELECT * FROM categorias";
$rs $inicl->Consulta($str);
$nr $inicl->NumeroFilas($rs);
$i 0;
while (
$ob $inicl->DevolverFilasConsulta($rs)) {
    echo 
"<li class='categorias'>" $ob->cat_des "</li>";

El error me salen en estas lineas:
Código PHP:
$nr $inicl->NumeroFilas($rs);
...
$ob $inicl->DevolverFilasConsulta($rs
Por favor si alguien pudo ver el error, hágamelo saber, le estoy dando vueltas y no veo por donde podria estar el error.

Gracias de antemano.
__________________
El aprendiz.
  #2 (permalink)  
Antiguo 22/01/2009, 16:07
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Ayuda con mi clase

Hola juandedios,

¿Que error te muestra?

Saludos
  #3 (permalink)  
Antiguo 23/01/2009, 09:13
 
Fecha de Ingreso: mayo-2003
Ubicación: Lima
Mensajes: 967
Antigüedad: 20 años, 11 meses
Puntos: 8
Respuesta: Ayuda con mi clase

me muestra el error que le pongo si la consulta no es correcta, cheka la funcion NumeroFilas($rs) y DevolverFilasConsulta($rs), el mensaje de error que le pongo ahi si es que sale mal, eso mismo me sale, pero como te digo, esa clase la vengo usando en varios proyectos y recien ahora me da estos problemas, no se, quizas por error, borre algo, no tengo idea, pero le estoy dando vueltas revisando y revisando y no encuentro que cosa podria ser.
__________________
El aprendiz.
  #4 (permalink)  
Antiguo 23/01/2009, 10:06
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Ayuda con mi clase

Imprime el valor de mysql_error() despues de llamar a $inicl->Consulta($str);

Saludos
  #5 (permalink)  
Antiguo 23/01/2009, 11:04
 
Fecha de Ingreso: mayo-2003
Ubicación: Lima
Mensajes: 967
Antigüedad: 20 años, 11 meses
Puntos: 8
Respuesta: Ayuda con mi clase

No se si estare haciendo bien lo que me dijiste:

Código PHP:
$str "SELECT * FROM categorias";
$rs $inicl->Consulta($str);
echo 
mysql_error();
$nr $inicl->NumeroFilas($rs);
echo 
mysql_error();
$i 0;
while (
$ob $inicl->DevolverFilasConsulta($rs)) {
    echo 
"<li class='categorias'>" $ob->cat_des "</li>";

pero si es asi, no me imprime ningun error.
__________________
El aprendiz.
  #6 (permalink)  
Antiguo 23/01/2009, 11:08
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Respuesta: Ayuda con mi clase

Cita:
Iniciado por juandedios Ver Mensaje
me muestra el error que le pongo si la consulta no es correcta, cheka la funcion NumeroFilas($rs) y DevolverFilasConsulta($rs), el mensaje de error que le pongo ahi si es que sale mal, eso mismo me sale, pero como te digo, esa clase la vengo usando en varios proyectos y recien ahora me da estos problemas, no se, quizas por error, borre algo, no tengo idea, pero le estoy dando vueltas revisando y revisando y no encuentro que cosa podria ser.
Estimado "JuanDeDios":

Por lo que veo, el problema que estás teniendo escapa a lo que podemos analizar con ese código, tienes que revisar el resto de la aplicación.

En testing hay una regla fundamental: "NUNCA asumas NUNCA nada".

Por lo tanto, y más cuando trabajamos con base de datos, el primer paso (POR MAS OBVIO QUE SEA) imprime la consulta que genera tu PHP y pruébala directamente contra la base de datos, si responde correctamente, recién ahí, revisas el código PHP.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #7 (permalink)  
Antiguo 23/01/2009, 11:19
 
Fecha de Ingreso: mayo-2003
Ubicación: Lima
Mensajes: 967
Antigüedad: 20 años, 11 meses
Puntos: 8
Respuesta: Ayuda con mi clase

Ya lo hice, y en la base de datos si me devuelve el resultado.
__________________
El aprendiz.
  #8 (permalink)  
Antiguo 23/01/2009, 11:23
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Respuesta: Ayuda con mi clase

Cita:
Iniciado por juandedios Ver Mensaje
Ya lo hice, y en la base de datos si me devuelve el resultado.
Revisa el manual, agrega el control de errores dentro de la clase, inmediatamente después de cada ejecución y pásale el enlace de conexión de la base de datos

mysql_errno($link)
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #9 (permalink)  
Antiguo 23/01/2009, 11:30
 
Fecha de Ingreso: mayo-2003
Ubicación: Lima
Mensajes: 967
Antigüedad: 20 años, 11 meses
Puntos: 8
Respuesta: Ayuda con mi clase

Hola Enriqueplace, e puesto asi en la función Consulta:
Código PHP:
public function Consulta($sql)
{
    if (empty(
$sql)) {
        echo 
"La sentencia SQL no es válida.";
    }
    else {
        
$rs mysql_query($sql$this->con) or die(mysql_errno($this->con));
        return 
$rs;
    }

cuando veo la pagina, a partir de esa parte no muestra nada, se queda en blanco.
ni siquiera puedo ver que error es.
__________________
El aprendiz.
  #10 (permalink)  
Antiguo 23/01/2009, 11:45
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Respuesta: Ayuda con mi clase

Realiza un var_dump y die a la consulta y a la conexión para ver si a esa altura tienes algo.

Código PHP:
public function Consulta($sql)
{
        if (empty(
$sql)) {
           echo 
"La sentencia SQL no es válida.";
       }else {
          
          echo 
"sql:".$sql;
          
var_dump($this->con);
          die(
'debug');

          
$rs mysql_query($sql$this->con) or die(mysql_errno($this->con));
          return 
$rs;

       }

__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #11 (permalink)  
Antiguo 23/01/2009, 12:15
 
Fecha de Ingreso: mayo-2003
Ubicación: Lima
Mensajes: 967
Antigüedad: 20 años, 11 meses
Puntos: 8
Respuesta: Ayuda con mi clase

Lo que me imprime es esto:

sql:SELECT * FROM categoriasNULL debug
__________________
El aprendiz.
  #12 (permalink)  
Antiguo 23/01/2009, 12:16
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Respuesta: Ayuda con mi clase

Si te dice NULL es que no tienes la conexión de la base de datos, la perdiste antes de ese paso. Revisa paso a paso de esta forma antes de llegar a ese método cuando tienes la conexión y cuando la pierdes.

Revisa si logras hacer la conexión inicial con éxito y luego sigue el flujo del sistema.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #13 (permalink)  
Antiguo 23/01/2009, 12:37
 
Fecha de Ingreso: mayo-2003
Ubicación: Lima
Mensajes: 967
Antigüedad: 20 años, 11 meses
Puntos: 8
Respuesta: Ayuda con mi clase

asi lo puse en la función donde conecto, pero no me imprime nada:
Código PHP:
private function Conectar()
{
    
$this->con mysql_connect(HOSTUSPW);
    
var_dump($this->con);
        die(
'debug');
    if (
$this->con) {
        
mysql_select_db(DBASE$this->con);
    }
    else {
        echo 
mysql_error($this->con);
    }

__________________
El aprendiz.
  #14 (permalink)  
Antiguo 23/01/2009, 12:44
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Ayuda con mi clase

Prueba hacer, así:
Código php:
Ver original
  1. private function Conectar()
  2. {
  3.     $this->con = mysql_connect(HOST, US, PW) or die( mysql_error() );
  4.     var_dump($this->con);
  5.         die('debug');
  6.     if ($this->con) {
  7.         mysql_select_db(DBASE, $this->con);
  8.     }
  9.     else {
  10.         echo mysql_error($this->con);
  11.     }
  12. }

Saludos
  #15 (permalink)  
Antiguo 23/01/2009, 12:50
 
Fecha de Ingreso: mayo-2003
Ubicación: Lima
Mensajes: 967
Antigüedad: 20 años, 11 meses
Puntos: 8
ps, tampoco me imprime nada.

ahora me sale este mensaje al momento de conectar: "Too many conections", a que se debe, cuando produce este error?
__________________
El aprendiz.

Última edición por GatorV; 24/01/2009 a las 00:31
  #16 (permalink)  
Antiguo 23/01/2009, 13:39
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Respuesta: Ayuda con mi clase

Estimado, la base de datos que te intentas conectar es remota o local?

Lo que dice claramente el mensaje es que hay demasiadas conexiones y no te deja conectar.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #17 (permalink)  
Antiguo 23/01/2009, 14:09
 
Fecha de Ingreso: mayo-2003
Ubicación: Lima
Mensajes: 967
Antigüedad: 20 años, 11 meses
Puntos: 8
Respuesta: Ayuda con mi clase

la base de datos es remota, pero ahora me sale el siguiente error:

Lost connection to MySQL server at 'reading initial communication packet', system error: 61
__________________
El aprendiz.
  #18 (permalink)  
Antiguo 23/01/2009, 14:11
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Respuesta: Ayuda con mi clase

Estimado, re-estimado, re-sugerencia:

Desarrolla localmente y luego prueba remotamente, esto tiene pinta que solo es problema de conectividad con tu base de datos y/o servidor, no de tu código.

Tienes que tener distintos ambientes: desarrollo, test y producción, a lo sumo dos.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #19 (permalink)  
Antiguo 23/01/2009, 14:21
 
Fecha de Ingreso: mayo-2003
Ubicación: Lima
Mensajes: 967
Antigüedad: 20 años, 11 meses
Puntos: 8
Ok, gracias, probare localmente como me dices y de ahi lo subiré.

Era problema de conectividad con la base de datos, mil disculpas por la perdida de tiempo, de todas maneras me ha servido de mucho las sugerencias que me han dado.

Muchas gracias.
__________________
El aprendiz.

Última edición por GatorV; 24/01/2009 a las 00:32
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:26.