Comunidad de diseño web y desarrollo en internet online

Registro

Citar            
MensajeEscrito el 14 Abr 2011 12:23 pm
Hola, estoy haciendo un formulario para registro de un usuario el cual contiene 6 campos, anteriormente lo hacia todo amontonado, que en el mismo formulario estaba la conexión a la base de datos y su control, pero ahora despues de documentarme mejor, la forma mas correcta de hacer esto es usando "POO", creando clases y objetos, se me hace enrredado hacer esto asi, implementando clases, segun mi logica, mis archivos quedan así.

configdb.php

Código PHP :

<?php

$url = "localhost";
$user = "root";
$password = "admin";
$base = "registro";

?>


conexion.php

Código PHP :

<?php

class Conexion{
   public function Conexion(){
   }
   
   public function conectameDBMS($url,$user,$password,$base){
      if(!($link = mysql_connect($url,$user,$password))){
         echo "Error al conectar la base de datos";
         exit();
      }
      if(! mysql_select_db($base,$link)){
         echo "No existe la base de datos requerida por el usuario";
         exit();
      }
      return $link;
   }
   
   public function liberarMemoria($result){
      mysql_close($result);
   }
   
   public function ejecutarQuery($sql,$con){
      return mysql_query($sql,$con);
   }
   
   public function cerrarDBMS($con){
      mysql_close($con);
   }
}

?>


usuario.php
Este es el encapsulamiento

Código PHP :

<?php

class Usuario{
   private $nombre;
   private $app;
   private $apm;
   private $email;
   private $username;
   private $password;
   
   public function __construct(){
   }
   
   //----------------------------------------------------------------------------------------
   
   public function setNombre($nuevoNombre){
      $this->nombre = $nuevoNombre;
   }
   
   public function setApellidoPaterno($nuevoApp){
      $this->app = $nuevoApp;
   }
   
   public function setApellidoMaterno($nuevoApm){
      $this->apm = $nuevoApm;
   }
   
   public function setEmail($nuevoEmail){
      $this->email = $nuevoEmail;
   }
   
   public function setUsername($nuevoUsername){
      $this->username = $nuevoUsername;
   }
   
   public function setPassword($nuevoPassword){
      $this->password = $nuevoPassword;
   }
   
   //----------------------------------------------------------------------------------------
   
   public function getNombre(){
      return $this->nombre;
   }
   
   public function getApp(){
      return $this->app;
   }
   
   public function getApm(){
      return $this->apm;
   }
   
   public function getEmail(){
      return $this->email;
   }
   
   public function getUsername(){
      return $this->username;
   }
   
   public function getPassword(){
      return $this->password;
   }
}

?>


dbutil.php
En esta creo mi funcion, la cual me permitira insertar registros

Código PHP :

<?php

class DBUtil{
   public function DBUtil(){
   }
   
   public function isertar($nombre,$app,$apm,$email,$username,$password){
      $sql = "INSERT INTO usuario (nombre                     , 
                            app                     , 
                            apm                     , 
                            email                     , 
                            username                  , 
                            password)
                             
                            VALUES
                             
                            ('{".$_POST['nombre']."}'      , 
                             '{".$_POST['app']."}'         , 
                             '{".$_POST['apm']."}'         , 
                             '{".$_POST['email']."}'      , 
                             '{".$_POST['username']."}'   , 
                             '{".$_POST['password']."}'
                             )"                     ;
                             
      if(mysql_query($sql,conectameDBMS($url,$user,$password,$base))){
         $msn = "Datos insertados correctamente";
      }else{
         $msn = "ERROR->".mysql_error();
      }
   }
}

?>


index.php

Código HTML :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Registro de usuario</title>
</head>

<body>
<?php

include("class/conexion.php");
include("class/dbutil.php");
include("class/usuario.php");
include("lib/configdb.php");

?>
<form method="post" action="class/dbutil.php">
<table border="0">
  <tr>
    <td>Nombre</td>
    <td><input type="text" name="nombre" value="<?php if(!empty($_POST['nombre'])) echo $_POST['nombre']; ?>" /></td>
  </tr>
  <tr>
    <td>Apellido Paterno</td>
    <td><input type="text" name="app" value="<?php if(!empty($_POST['app'])) echo $_POST['app']; ?>"  /></td>
  </tr>
  <tr>
    <td>Apellido Materno</td>
    <td><input type="text" name="apm" value="<?php if(!empty($_POST['apm'])) echo $_POST['apm']; ?>"  /></td>
  </tr>
  <tr>
    <td>E-mail</td>
    <td><input type="text" name="email" value="<?php if(!empty($_POST['email'])) echo $_POST['email']; ?>"  /></td>
  </tr>
  <tr>
    <td>Username</td>
    <td><input type="text" name="username" value="<?php if(!empty($_POST['username'])) echo $_POST['username']; ?>"  /></td>
  </tr>
  <tr>
    <td>Password</td>
    <td><input type="text" name="password" value="<?php if(!empty($_POST['password'])) echo $_POST['password']; ?>"  /></td>
  </tr>
  <tr>
    <td colspan="2" align="center"><input type="submit" name="enviar" value="Insertar" /></td>
  </tr>
</table>
</form>
</body>
</html>


Esta es la tabla donde se insertaran los registros del formulario, la base se llama registro

Código MySQL :

CREATE TABLE `usuario` (
`nombre` VARCHAR( 100 ) NOT NULL ,
`app` VARCHAR( 100 ) NOT NULL ,
`apm` VARCHAR( 100 ) NOT NULL ,
`email` VARCHAR( 100 ) NOT NULL ,
`username` VARCHAR( 100 ) NOT NULL ,
`password` VARCHAR( 100 ) NOT NULL ,
PRIMARY KEY ( `email` )
) ENGINE = MYISAM ;



El problema que tengo con mi formulario, es que no inserta los registros que le ingreso, perdon por ser tan novata, espero mejorar con el tiempo y aprender hacer las cosas bien.

Gracias por la atención.

:D

Por powergirl

6 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 14 Abr 2011 04:31 pm
el objetivo de la POO es reutilizar el codigo y hacerlo mas entendible,
tu clase conexion no usa eso por que sigues haceindo lo mismo que arias usando solo funciones

por ejemplo en esta parte de conexion.php

Código PHP :

public function liberarMemoria($result)

haces lo mismo solo que traducido a
mysql_close($result);
te dejo tu codigo, pero algo mas compacto y util
conexion.php

Código PHP :

<?php 
 
class Conexion{
   private $persistencia = null;
   //esto esto desactualizado no sirve
   //public function Conexion(){}
   // en su lugar usa el metodo magico __construct que es el constructor
   public function __construct()
   {
   }
   //esto deberia ir al constructor ya que solo se le llama por unica vez
   public function conectameDBMS($url,$user,$password,$base)
   {
      //agregamos a la variable que sera compartida por todos los metodos
      $this->persistencia = mysql_connect($url,$user,$password);
      //luego hacemos la comprobacion de si la conexion tuvo exito o no
      if(!is_resource($this->persistencia))
      {
         echo "Error al conectar la base de datos";
         //die es lo mismo que exit
         die();
      }
      else
      {
         //si la conexion tuvo exito se procede a elegir la base de datos
         mysql_select_db($base,$this->persistencia );
         echo "No existe la base de datos requerida por el usuario"; 
         exit(); 
      }
   }
   //nuestro metodo liberar memoria
   public function liberarMemoria()
   {
      //podemos hacer una comprobacion en todos los metodos
      if(is_resource($this->persistencia))
      {
         //mysql_close($this->persistencia);
         mysql_free_result($this->persistencia);
      }
      else
      {
         echo 'No se puede liberar la memoria por que la conexion se perdio';
         die();
      }
   } 
   //solo necesitamos la consulta sql la conexion la menejamos internamente
   public function ejecutarQuery($sql)
   {
      return mysql_query($sql,$this->persistencia); 
   }
    
   public function cerrarDBMS()
   {
      if(is_resource($this->persistencia))
      {
         //mysql_close($this->persistencia);
         mysql_close($this->persistencia); 
      }
      else
      {
      }
   }
   //un extra metodo magico cuando destruyes la instancia hace un proceso que sera
   public function __destruct()
   {
      $this->cerrarDBMS();
   }
}
?>

echal un vistaso a la pagina oficial de php
http://www.php.net/manual/es/language.oop5.php

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 14 Abr 2011 04:50 pm
a y tu error es que en ningun momento llamas a tu clase 'DBUtil'
desde tu formulario haces referencia al archivo
form method="post" action="class/dbutil.php">
pero en ese archivo solo defines la clase mas no la usas

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 19 Abr 2011 07:24 am
Muchas gracias tuadmin, la nueva conexion es genial, ¿que es lo que devo saver para hacer todos estos movimientos, altas bajas cambios pero utilizando un solo formulario?, gracias por tus comentarios, me son de mucha utilidad.

^^

Por powergirl

6 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 19 Abr 2011 03:02 pm
pues eso es un poco mas complejo seria algo asi como ABM (altas, bajas y modificaciones). mm bueno para realizar algo asi tendrias analizar una estructura y adaptarla a tus necesidades como un MVC o talvez te convendria usar la classe de plantillas Smarty bueno eso depende de como lo vea y es segun tus requerimientos

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.