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

PHP OO problemas al Usar una clase para la conexion a base de datos

Estas en el tema de problemas al Usar una clase para la conexion a base de datos en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Tratando de aprender mas sobre PHP me he propuesto realizar un ejemplo didactico usando algo de POO, es asi como quiero realizar un registro de ...
  #1 (permalink)  
Antiguo 14/11/2011, 14:45
Avatar de mitcheldaza  
Fecha de Ingreso: junio-2011
Ubicación: Colombia
Mensajes: 42
Antigüedad: 12 años, 10 meses
Puntos: 1
problemas al Usar una clase para la conexion a base de datos

Tratando de aprender mas sobre PHP me he propuesto realizar un ejemplo didactico usando algo de POO, es asi como quiero realizar un registro de usuarios con su correspondiente validacion.
Tengo un formulario normal y corriente.

Código HTML:
<form id="ContactForm" name="registro"  action="modelos/BDregistrar.php" method="post">
							<div>

									
<div class="bg3"><input class="input" type="text" id="nombreregistro" name="nombreregistro"></div>Nombre:
								

<div class="bg3"><input class="input" type="text" id="mailreg" name="mailreg"></div>Email:

<div class="bg3"><input class="input" type="text" id="movil" name="movil"></div>Celular:
				
Nombre deusuario:
<div class="bg4"><input class="input" type="text" id="nom_user" name="nom_user">
								
Contraseña:<div class="bg4"><input class="input" type="password" id="pass_a" name="pass_a"></div>

Confirme la contraseña:<div class="bg4"><input class="input" type="password" id="pass_b" name="pass_b"></div>
								
<a  class="buttoncont" input type="button" name="registro" onclick="registroinicial()">Enviar</a> 
La accion del boton de envio "registroinicial" es una funcion javascript para validacion, si la validacion es correcta uso el document.submit para el envio de los datos del formulario, hasta hay todo funciona correctamente.

Cuando efectivamente las comprobaciones por medio de javascript dan un resultado exitoso el submit realiza la siguiente accion

Código PHP:
action="modelos/BDregistrar.php" 
Este archivo es el siguiente "esta resumido"

Código PHP:
<?php
//con el include acceso al archivo de conexion a la base de datos
include ('BDconexion.php');

 class 
Registrar{
     private 
$conexion;
    
     public function 
_construct(){
         
$this->conexion=new BDconexion();
        
$this->aprobaruser();
        
     }
    
    function 
getConexion(){
        echo 
"metodo getconection";
        
$conex=$conexion->connect();
        return 
$conex;
    }
    
    
         function 
aprobaruser(){
             
//revisar la existencia de un nombre de usuario o un email igual en la bd
             
                        
                        
         
}
        function 
registrar(){
            
//registrar el usuario en la BD
        
        
}

}


?>
Como se dan cuenta la pirmera linea incluye un archivo php desde donde manejo la conexion con la BD.

Mi problema no es la validacion de la logica de la existencia de usuarios en la BD y demas comprobaciones, mi problema esta en que apenas hago el llamado a BDregistrar por medio del submit del formulario, efectivamente el navegador se dirige a este archivo pero nada aárece es como si el archivo no hiciera nada (aclaro que el archivo original es mas extenso y he agregado salidas en pantalla para revisar hasta donde llega el llamado).

Haciendo esto efectivamente me di cuanta que entra al archivo pero jamas al constructor de la clase y por ende a otros atributos de la clase.

Creo que mi problema esta en el llamado de la clase registrar desde el action del formulario, aclarando que ejecuto la accion del action desde javascript usando el arreglo de formas del documento.

Agradezco cualquier ayuda, considero que debe ser un error tonto pues sin usar POO el sistema funciona correctamente.

Se me olvidaba la forma de la llamada action="modelos/BDregistrar.php" es por que el archivo esta en una carpeta lamada modelos distinta a donde se encuantrra el index del formulario.

por si acaso aquie esta el archivo BDconexion.php



Código PHP:
class DBconnection{
    
    public 
$conexion;  
     
                function 
connect(){
                    echo 
"metodo connect de BDconecction";
                    
$conexion=mysql_connect("localhost","***","****") or die ("No es posible la conexion con la BD");
                    
                    
mysql_select_db("BD**",$conexion) or die("problemas en la selecion de la BD");
                    
                    return 
$conexion;
                                                }     

  #2 (permalink)  
Antiguo 14/11/2011, 15:04
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: problemas al Usar una clase para la conexion a base de datos

Lo que te falta es "utilizar tu clase", ya que tienes tu clase, mejor crear otro archivo fuera de la carpeta models que se llame por ejemplo registrar.php y pones adentro:
Código PHP:
Ver original
  1. require_once 'models/BDregistrar.php';
  2.  
  3. $registrar = new Registrar();
  4. $registrar->registrar();

O algo así, una cosa es que diseñes tu clase luego la tienes que implementar en algún lado.

Saludos.
  #3 (permalink)  
Antiguo 14/11/2011, 16:19
Avatar de mitcheldaza  
Fecha de Ingreso: junio-2011
Ubicación: Colombia
Mensajes: 42
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: problemas al Usar una clase para la conexion a base de datos

Esta pregunta es algo tonta pero tengo que hacer esto siempre que necesite usar un objeto a partir de un formulario ?

otra cosa como aparte del registro separe en otra clase la conexion necesito en el archivo registrar.php (el archivo que se me aconsejo crear) llamra tambien a esta clase o como esta desde el original "desde el constructor donde se usa" esta correcto

Código PHP:
class Registrar{
     private 
$conexion;
    
     public function 
_construct(){
         
$this->conexion=new BDconexion();
        
$this->aprobaruser();
        echo 
"entra al constructor";
     }

  #4 (permalink)  
Antiguo 14/11/2011, 16:21
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: problemas al Usar una clase para la conexion a base de datos

Así es es, cada que quieras "usar" tus clases debes de implementarlas, ya que PHP no tiene un mecanismo por defecto que llame a un main (como lo haría Java por ejemplo), tienes que forzoso tu implementarlas.

Así es es correcto, cuando quieras usar otras clases en el constructor lo puedes hacer, o ya sea en el método, ambas formas son correctas, para empezar, aunque ya más a fondo lo que debes de hacer es buscar sobre "inyección de dependencias" que es la forma más correcta de hacer diseño de software.

Saludos.
  #5 (permalink)  
Antiguo 14/11/2011, 16:35
Avatar de mitcheldaza  
Fecha de Ingreso: junio-2011
Ubicación: Colombia
Mensajes: 42
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: problemas al Usar una clase para la conexion a base de datos

Creo que por esperar algo parecido al main de java me fallaron las cosas, tengo una ultima pregunta sobre esto no se si me pueda ayudar.

el metodo connect de la clase BDconecction retorna la conexion para ser usada despues por otro archivo.
Código PHP:
 class BDconnection{
    
    public 
$conexion;  
     
                function 
connect(){
                    echo 
"metodo connect de BDconecction";
                    
$conexion=mysql_connect("localhost","root","root") or die ("No es posible la conexion con la BD");
                    
                    
mysql_select_db("teatro",$conexion) or die("problemas en la selecion de la BD");
                    
                    return 
$conexion;
                                                }     

Sin embargo cuando quiero obtener esa conexion desde una clase la de BDregistro, mediante estas lineas obtengo un error fatal por cierto

class Registrar{
private $conexion;
function getConexion(){
$this->conexion=new BDconnection(); //creando elemento BDconnectio
echo "metodo getconection"; // una salida en pantalla de control
//aqui quiero que mi variable local $conex obtenga la conexion que retorna el metodo connect de la clase BDconnection, es aqui donde esta el error.
$conex=$conexion->connect();
return $conex;
}
}
  #6 (permalink)  
Antiguo 14/11/2011, 16:36
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: problemas al Usar una clase para la conexion a base de datos

El problema es que si lo almacenas en $this->conexion, lo tienes que rescatar de igual forma:

$conex = $this->conexion, ya que $conexion representa una variable nula.

Saludos.
  #7 (permalink)  
Antiguo 14/11/2011, 18:38
Avatar de mitcheldaza  
Fecha de Ingreso: junio-2011
Ubicación: Colombia
Mensajes: 42
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: problemas al Usar una clase para la conexion a base de datos

Gracias por la ayuda me slvaste de una busqueda ....

ni siquiera sabia por donde empezar a buscar gracias de nuevo

Etiquetas: php+clases
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 06:34.