Foros del Web » Programando para Internet » PHP »

Error al conectar a bbdd con poo

Estas en el tema de Error al conectar a bbdd con poo en el foro de PHP en Foros del Web. Hola amigos/as, a ver si me pueden ayudar con esto. Miren tengo dos archivos, el primer archivo sirve de conexion a la base de datos. ...
  #1 (permalink)  
Antiguo 26/03/2015, 17:12
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 12 años
Puntos: 5
Error al conectar a bbdd con poo

Hola amigos/as, a ver si me pueden ayudar con esto.

Miren tengo dos archivos, el primer archivo sirve de conexion a la base de datos.

y el segundo archivo es una clase que recibe los datos provinientes de un formulario,

(email y password), para hacer login.


archivo 1 llamado, conexion.php:

Código PHP:
Ver original
  1. class Conectar {
  2. public $servidor = 'localhost';
  3. public $usuario = 'root'; public $pass = '';
  4. public $basedatos = 'bbdd_login';
  5.  
  6. //CONECTAMOS A LA BASE DE DATOS..................................................................
  7.  
  8. public static function con()
  9. {
  10. $con = mysqli_connect($this->servidor, $this->usuario, $this->pass, $this->basedatos) or die ('Lo siento pero no conecta a la BBDD');
  11.  
  12. return $con;
  13.  
  14.  }
  15. } //fin de Conectar



archivo 2, llamado class_login.php:

Código PHP:
Ver original
  1. require_once("conexion.php");
  2.  
  3. class LoginUsuario
  4. {
  5. public function Sesion() {
  6. echo "has conectado a bbdd</br>";
  7. //recogemos las variables post del formulario
  8. $email = $_POST['email'];
  9. $password = $_POST['password'];
  10.  
  11. echo $query = "SELECT * FROM admin WHERE email='".strip_tags($email)."' AND password='".strip_tags($password)."';";
  12.  
  13. $con = new Conectar();
  14. $link=$con->con();
  15.  
  16. $resultado = mysqli_query($query, $link) or die ('Lo siento pero no se inserta en BBDD' . mysqli_error($link));
  17.  
  18. return $resultado;
  19.  
  20. } //fin de Sesion
  21.  
  22. } //fin de class LoginUsuario



Pero me lanza un error que dice:

Fatal error: Using $this when not in object context in------conexion.php on line 33

linea 33 hace referencia a esto:

Código PHP:
Ver original
  1. $con = mysqli_connect($this->servidor, $this->usuario, $this->pass, $this->basedatos) or
  2. die ('Lo siento pero no conecta a la BBDD');


Pero es que la conexion tal come esta ya la utilizo asi para otras clases que tengo y me interesaria mas adaptar el

archivo class_login.php a esta conexion.php, que modificar el archivo conexion.php.


Pero no se que falla.


Imagino que tiene que ser una tonteria por lo que el archivo class_login.php no hace lo que debe pero lo he intentando todo , hasta donde se hacer y nada

gracias de antemano.
  #2 (permalink)  
Antiguo 26/03/2015, 19:29
Avatar de NueveReinas  
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 10 años, 8 meses
Puntos: 145
Respuesta: Error al conectar a bbdd con poo

Quizá debas revisar esto por si te ayuda: http://php.net/manual/es/mysqli.construct.php
__________________
¿Te sirvió la respuesta? Deja un +1
  #3 (permalink)  
Antiguo 27/03/2015, 01:59
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 12 años
Puntos: 5
Respuesta: Error al conectar a bbdd con poo

HOla nueveReinas, ante todo gracias por ayudarme.

Mira, he estado viendo detenidamente el enlace que me has mandado y segun parece

la forma de hacerlo yo , corresponde a una forma abstracta de hacerlo.


El asunto es que como ves en mi codigo hay varios "echo", los cuales me dicen:

el primero : "has conectado a bbdd"

y el segundo echo dice:

SELECT * FROM admin WHERE email='[email protected]' AND password='ejemplopass';


De donde deduzco que , si, conecta a bbdd.

Pero no entiendo por que me dice despues:

Fatal error: Using $this when not in object context in conexion.php on line 32

Eso no lo entiendo y es lo que hace que no me funcione.
  #4 (permalink)  
Antiguo 27/03/2015, 02:34
Avatar de NueveReinas  
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 10 años, 8 meses
Puntos: 145
Respuesta: Error al conectar a bbdd con poo

Busca eso mismo en Google.

"Fatal error: Using $this when not in object context".

Quizá a alguien le pase lo mismo que a vos y puedas aprender de sus errores.
__________________
¿Te sirvió la respuesta? Deja un +1
  #5 (permalink)  
Antiguo 27/03/2015, 03:33
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Error al conectar a bbdd con poo

No hace falta mirar nada más que el manual.. pero tienes que saber dónde...

En este caso, está en static:
http://php.net/manual/es/language.oop5.static.php

Dice así:
"Debido a que los métodos estáticos se pueden invocar sin tener creada una instancia del objeto, la pseudo-variable $this no está disponible dentro de los métodos declarados como estáticos."

Ya sabes de dónde viene el fallo ;)
__________________
>> Eleazan's Source
>> @Eleazan
  #6 (permalink)  
Antiguo 27/03/2015, 03:43
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 12 años
Puntos: 5
Respuesta: Error al conectar a bbdd con poo

Te he hecho caso, he buscado el error en internet y modificado el codigo y me da oo resultado esto:

"1", el numero uno. nada mas ¿?, eso si , sin errores de sintaxis ni nada. pero se queda ahi.

es decir no me redirige a pagina alguna.

ufffff

el archivo conexion esta igual y el otro llamado class_login.php

lo tengo ahora asi:

Código PHP:
Ver original
  1. class LoginUsuario extends Conectar
  2.    
  3.         {
  4.  
  5.  
  6.             public function Sesion()
  7.            
  8.             {  
  9.  
  10.                 //recogemos las variables post del formulario
  11.                 $email = $_POST['email'];
  12.                 $password = $_POST['password'];
  13.  
  14.  
  15. $link = mysqli_connect("localhost","root","") or die("Lo siento pero no se inserta en BBDD " . mysqli_error($link));
  16.  
  17.  
  18. echo $query = "SELECT * FROM admin WHERE email='".strip_tags($email)."' AND password='".strip_tags($password)."';" or
  19.  
  20. die("Error in the consult.." . mysqli_error($link));
  21.  
  22.  
  23. $resultado=mysqli_query($link, $query) or die(mysql_error());
  24.  
  25.  
  26.                 if ($reg=mysql_num_rows($resultado) == 0)
  27.                
  28.                     {
  29.                         header("Location:nueva_sesion.php?tipo_error=no_existe");
  30.                     }
  31.                
  32.                     else
  33.                    
  34.                 if($reg=mysql_fetch_array($resultado))
  35.                
  36.                     {
  37.                         $_SESSION['nick'] = $reg['nombre'];
  38.                         header("Location:logueado.php");
  39.                     }
  40.  
  41.  
  42.             } //fin de Sesion
  43.            
  44.         } //fin de class LoginUsuario


Agradeceria un poco de ayuda. la verdad.

Llevo 3 dias ya con esto.
  #7 (permalink)  
Antiguo 27/03/2015, 03:58
Avatar de NueveReinas  
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 10 años, 8 meses
Puntos: 145
Respuesta: Error al conectar a bbdd con poo

Prueba con la ruta absoluta.
__________________
¿Te sirvió la respuesta? Deja un +1
  #8 (permalink)  
Antiguo 27/03/2015, 06:50
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 12 años
Puntos: 5
Respuesta: Error al conectar a bbdd con poo

Hola ,Eleazan, no habia leido tu respuesta , se me paso, disculpa.

Te comento;

Olvidate de lo de static en el archivo de conexion a bbdd.

NO debi hacerlo ya que la clase , sin static, me funciona perfecto para otras clases que tengo de otras cosas.

Bien dicho esto.

El codigo que actualmente tengo y que se me sigue resistiendo por mas que leo el manual esta si:

archivo 1, conexion.php

Código PHP:
Ver original
  1. class Conectar
  2.    
  3.         {
  4.  
  5.             public $servidor = 'localhost';
  6.             public $usuario = 'root';
  7.             public $pass = '';
  8.             public $basedatos = 'bbdd_login';  
  9.        
  10.    
  11.             //CONECTAMOS A LA BASE DE DATOS..................................................................
  12.            
  13.             public function con()
  14.            
  15.             {
  16.                 $con = mysqli_connect($this->servidor, $this->usuario, $this->pass, $this->basedatos) or
  17.                 die ('Lo siento pero no conecta a la BBDD');
  18.                
  19.                 return $con;       
  20.             }
  21.  
  22.  
  23.  
  24.         } //fin de Conectar



Bien como no es un metodo static, hago la instancia a este metodo desde la otra clase del

archivo class_login.php

Código PHP:
Ver original
  1.    
  2.     require_once("conexion.php");
  3.    
  4.                    
  5.                
  6.     class LoginUsuario
  7.    
  8.         {  
  9.                    
  10.                 //recogemos las variables post del formulario
  11.                 $email = $_POST['email'];
  12.                 $password = $_POST['password'];
  13.  
  14.                 $query = "SELECT * FROM admin
  15.                 WHERE email='".strip_tags($email)."' AND password='".strip_tags($password)."';";
  16.  
  17.  
  18.                  $con = new con();             
  19.                  $link=$con->Conectar_bbdd();
  20.    
  21.  
  22.                  $resultado = mysqli_query($query, $link) or die ('Lo siento pero no se inserta en BBDD' . mysqli_error($link));
  23.                  return $resultado;
  24.  
  25.  
  26.                 if ($reg=mysql_num_rows($resultado) == 0)
  27.                
  28.                     {
  29.                         header("Location:nueva_sesion.php?tipo_error=no_existe");
  30.                     }
  31.                
  32.                     else
  33.                    
  34.                 if($reg=mysql_fetch_array($resultado))
  35.                
  36.                     {
  37.                         $_SESSION['nick'] = $reg['nombre'];
  38.                         header("Location:logueado.php");
  39.                     }
  40.  
  41.             } //fin de Sesion
  42.            
  43.         } //fin de class LoginUsuario


Hasta aqui , yo lo veo correcto todo pero me dice esto como error:


Warning: mysqli_query() expects parameter 1 to be mysqli, string given in

class_login.php on line 63

"Lo siento pero no se inserta en BBDD"


osea en la linea que dice:

Código PHP:
Ver original
  1. $resultado = mysqli_query($query, $link) or die ('Lo siento pero no se inserta en BBDD' . mysqli_error($link));
  2.                  return $resultado;



Estoy perdido, no me aclaro.

Es decir entiendo que lo que me dice el error es que me falta un parametro en mysqli_query pero cuando hago un echo en

Código PHP:
Ver original
  1. $query = "SELECT * FROM admin
  2.                 WHERE email='".strip_tags($email)."' AND password='".strip_tags($password)."';";


si me aparecen el email y la contraseña provinientes del formulario.

y doy por sentado que hace la conexion a la bbdd por que sino no llegaria el proceso hasta aqui.
  #9 (permalink)  
Antiguo 27/03/2015, 07:42
Avatar de NueveReinas  
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 10 años, 8 meses
Puntos: 145
Respuesta: Error al conectar a bbdd con poo

A ver, mysqli_query espera dos parámetros; la conexión y la consulta. En ese orden.
Si tu conexión está en una variable llamada $con y la consulta en una variable llamada $query, entonces:

Código PHP:
Ver original
  1. $resultado = mysqli_query($con, $query) or die ('Lo siento pero no se inserta en BBDD' . mysqli_error($link));
  2.                  return $resultado;

Ah, y en lugar de ese return $resultado; prueba con:

Código PHP:
Ver original
  1. $datos = mysqli_fetch_array($resultado);

Y entonces obtienes los datos, por ejemplo, así:

Código PHP:
Ver original
  1. $email = $datos['email'];
  2. $pasword = $datos['password'];

Aclaro que no soy ningún experto en PHP, quizá haya gente que te de mejores consejos que yo.

__________________
¿Te sirvió la respuesta? Deja un +1
  #10 (permalink)  
Antiguo 27/03/2015, 10:15
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Error al conectar a bbdd con poo

mensajeescrito que versión de php estas usando?.
por cierto toda la clase LoginUsuario no es correcta, así que primero comprende como se implementa el paradigma orientado a objetos en php: http://php.net/manual/en/language.oop5.php antes de intentar hacer abstracciones del acceso a base de datos. Cuando ya tengas una idea mas clara lee como funciona mysqli y decide si vas a usar el api orientada a objetos o la estructurada: http://php.net/manual/en/mysqli.quic...-interface.php
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Última edición por hhs; 27/03/2015 a las 10:23
  #11 (permalink)  
Antiguo 27/03/2015, 11:39
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 12 años
Puntos: 5
Respuesta: Error al conectar a bbdd con poo

Hola hhs, respecto la version de php5 , hasta donde yo se.

Y respecto al problema , EUREKA!!! , lo solucioné.

Aqui pongo la solucion, que funciona ya, lo unico que pediria , es que aunque conecta a bbdd y muestra los datos correctamente.

Si vieras hhs algo que pudiera mejorar en dicho codigo que ahora le muestro , lo agradeceria enormemente.

En cualquier caso, si estuviera bien espero que le sirva a los que pudieran tener un problema como este.


archivo 1, conexion.php:

Código PHP:
Ver original
  1. class Conectar
  2.    
  3.         {
  4.  
  5.             public $servidor = 'localhost';
  6.             public $usuario = 'root';
  7.             public $pass = '';
  8.             public $basedatos = 'bbdd_login';  
  9.        
  10.  
  11.            
  12.             public function ConectarBbdd()
  13.            
  14.             {
  15.                 $con = mysqli_connect($this->servidor, $this->usuario, $this->pass, $this->basedatos);             
  16.                
  17.                 if (mysqli_connect_errno($con))
  18.                
  19.                     {
  20.                         echo "Lo siento pero no conecta a la BBDD: " . mysqli_connect_error($con);
  21.                     }
  22.                
  23.                 return $con;       
  24.             }
  25.  
  26.         } //fin de Conectar


archivo 2, class_login.php


Código PHP:
Ver original
  1.    
  2.     require_once("conexion.php");
  3.    
  4.                    
  5.                
  6.     class LoginUsuario
  7.    
  8.         {  
  9.  
  10.             public function Sesion()
  11.            
  12.             {                  
  13.                    
  14.                 //recogemos las variables post del formulario
  15.                 $email = $_POST['email'];
  16.                 $password = $_POST['password'];
  17.                
  18.                
  19.                 //realizamos la consulta sql,
  20.                 $query = "SELECT * FROM admin
  21.                 WHERE email='".strip_tags($email)."' AND password='".strip_tags($password)."';";
  22.  
  23.  
  24.                  $con = new Conectar();                
  25.                  $link=$con->ConectarBbdd();
  26.    
  27.  
  28.                   if ($resultado=mysqli_query($link, $query) or die ('No se inserta en BBDD' . mysqli_error($link)))
  29.                     {
  30.                  
  31.                       if($reg=mysqli_num_rows($resultado) == 0)
  32.                      
  33.                           {
  34.                               header("Location:nueva_sesion.php?tipo_error=no_existe");    
  35.                           }
  36.                      
  37.                       else
  38.                      
  39.                       if($reg=mysqli_fetch_array($resultado))
  40.                      
  41.                           {
  42.                               $_SESSION['nick'] = $reg['nombre'];  
  43.                               header("Location:logueado.php");     
  44.                           }
  45.                  
  46.                     }
  47.  
  48.  
  49.  
  50.             } //fin de Sesion
  51.            
  52.         } //fin de class LoginUsuario

Etiquetas: bbdd, formulario, mysql, poo, select, variable
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 09:36.