Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema con una clase

Estas en el tema de Problema con una clase en el foro de PHP en Foros del Web. Hola, Buen día miren tengo el siguiente código que es para la conexión y sentencias de la db: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original <?php ...
  #1 (permalink)  
Antiguo 22/03/2015, 15:41
 
Fecha de Ingreso: junio-2014
Mensajes: 60
Antigüedad: 9 años, 10 meses
Puntos: 0
Problema con una clase

Hola, Buen día
miren tengo el siguiente código que es para la conexión y sentencias de la db:

Código PHP:
Ver original
  1. <?php
  2. require 'config_db.php';
  3.  
  4. class Conexion {
  5.    
  6.     private static $instance;
  7.     private $bd;
  8.    
  9.     private function __construct(){
  10.  
  11.         $this->bd = new mysqli(Host, User_Host, Pass_Host, DB_Host);
  12.  
  13.         if (mysqli_connect_errno()) {
  14.             throw new Exception('Database error.');
  15.         }
  16.  
  17.         $this->bd->set_charset("utf8");
  18.     }
  19.    
  20.     public static function init(array $dbOptions){
  21.         if(self::$instance instanceof self){
  22.             return false;
  23.         }
  24.        
  25.         self::$instance = new self($dbOptions);
  26.     }
  27.        
  28.     public static function Query($VQuerys){
  29.         return self::$instance->bd->Query($VQuerys);
  30.     }
  31.    
  32.     public static function esc($str){
  33.         return self::$instance->bd->real_escape_string(htmlspecialchars($str));
  34.     }
  35. }
  36. ?>

La cosa es que al hacer la sentencia:

Código PHP:
Ver original
  1. $Config = Conexion::Query("SELECT * FROM cms_config");
  2. $ViewConfig = $Config->fetch_array();

La pagina la tira en blanco, no se en que estoy mal, soy nuevo en el tema de clases, pero no encuentro el error, ¿pueden echarme una mano por favor?

Gracias por su atención
  #2 (permalink)  
Antiguo 22/03/2015, 18:37
 
Fecha de Ingreso: junio-2014
Mensajes: 60
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Problema con una clase

Perdonen, parece que el error lo tengo el la function de las querys, osea este:
Código PHP:
Ver original
  1. public static function Query($VQuerys){
  2.         return self::$instance->bd->Query($VQuerys);
  3.     }
Pero ¿Porque estoy mal?
  #3 (permalink)  
Antiguo 22/03/2015, 22:22
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema con una clase

Cita:
La pagina la tira en blanco, no se en que estoy mal, soy nuevo en el tema de clases, pero no encuentro el error, ¿pueden echarme una mano por favor?
Si te muestra la página en blanco no es normal.

Necesitas habilitar el reporte de errores y/o revisar el log de errores.

Cuando puedas obtener un mensaje de error lo mejor que puedes es compartirlo, eso es muy útil para entender.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 22/03/2015, 22:30
 
Fecha de Ingreso: junio-2014
Mensajes: 60
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Problema con una clase

Cita:
Iniciado por pateketrueke Ver Mensaje
Si te muestra la página en blanco no es normal.

Necesitas habilitar el reporte de errores y/o revisar el log de errores.

Cuando puedas obtener un mensaje de error lo mejor que puedes es compartirlo, eso es muy útil para entender.
El log de errores me dice esto:

[23-Mar-2015 05:35:38 Europe/Berlin] PHP Notice: Trying to get property of non-object in C:\xampp\htdocs\Conexion.php on line 29

[23-Mar-2015 05:35:38 Europe/Berlin] PHP Fatal error: Call to a member function query() on null in C:\xampp\htdocs\Conexion.php on line 29
  #5 (permalink)  
Antiguo 22/03/2015, 22:49
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema con una clase

Veo que tu variable de instancia $db es una objeto MySQLi, ¿ya consultaste en el manual si el método Query() existe?

Digo, casi estoy seguro que debe ser query(), pero no lo sé.

__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 22/03/2015, 22:52
 
Fecha de Ingreso: junio-2014
Mensajes: 60
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Problema con una clase

Si, realmente también pensé que era eso, pero lo coloque en en minúsculas osea:
Código PHP:
Ver original
  1. return self::$instance->db->query();
Pero me tira el mismo error :/
  #7 (permalink)  
Antiguo 22/03/2015, 23:57
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema con una clase

Pues mira, para no tener que adivinar puedes hacer esto:
Código PHP:
Ver original
  1. var_dump(self::$instance->db, get_class_methods(self::$instance->db));

Y así nos muestras lo que te salga para ver si se trata de la instancia correcta, y que además tenga el método que buscas.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 23/03/2015, 06:36
 
Fecha de Ingreso: junio-2014
Mensajes: 60
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Problema con una clase

Lo he colocado y me tira "NULL NULL" y en el log tira:

[23-Mar-2015 15:35:32 Europe/Berlin] PHP Notice: Trying to get property of non-object in C:\xampp\htdocs\Conexion.php on line 24

Última edición por boistoc; 23/03/2015 a las 08:29
  #9 (permalink)  
Antiguo 23/03/2015, 08:33
 
Fecha de Ingreso: junio-2014
Mensajes: 60
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Problema con una clase

O ¿existe alguna otra forma de hacer las sentencias sql por medio de la clase? :/
  #10 (permalink)  
Antiguo 23/03/2015, 08:58
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema con una clase

El problema es que Conexion es una clase que jamás instancías, y sin embargo tiene un constructor que crea la conexión.

Pero obviamente jamás creas una instancia, y cuando invocas Query() en tu clase jamás te aseguras de haber creado la instancia primero, etc.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 23/03/2015, 09:05
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Problema con una clase

Es totalmente correcto no devuelves una instancia de tu objeto.
Recomendación: revisa tu lógica en la clase mas una vuelta al manual de php: http://php.net/manual/en/language.oop5.php
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #12 (permalink)  
Antiguo 23/03/2015, 09:19
 
Fecha de Ingreso: junio-2014
Mensajes: 60
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Problema con una clase

Listo, lo he corregido, he colocado una function para el self que me hacia falta, una ultima pregunta
¿Como puedo sacar los valores en array de una tabla mediante una misma function?
me explico, tengo esta function:

Código PHP:
Ver original
  1. class SelectQuerys {
  2.         public function selectconfig() {
  3.             $Config = Conexion::Query("SELECT * FROM cms_config");
  4.             $ViewConfig = $Config->fetch_array();
  5.     }
  6. }
Hasta aquí todo bien, pero la tabla contiene 6 campos
¿Como puedo sacarlos uno por uno desde la misma function?
Ya que si hago esto imprime todos los arrays de la tabla y quiero que salga uno por uno cuando los necesite:

Código PHP:
Ver original
  1. <?php echo SelectQuerys::selectconfig($ViewConfig ['Config_Title']); ?>

Última edición por boistoc; 23/03/2015 a las 09:26
  #13 (permalink)  
Antiguo 23/03/2015, 09:32
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Problema con una clase

Necesitas con urgencia leer el manual
No estas pasando parámetros a tu método.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #14 (permalink)  
Antiguo 23/03/2015, 11:13
 
Fecha de Ingreso: junio-2014
Mensajes: 60
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Problema con una clase

Listo, Gracias aunque no era necesario leer de nuevo el manual :)

Última edición por boistoc; 23/03/2015 a las 12:43

Etiquetas: clase, html, mysql, select
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 21:54.