Autor Tema: [Aporte] Clase para Registrar usuarios  (Leído 3215 veces)

Desconectado Physlet

  • PHPero Experto
  • *****
  • Mensajes: 822
  • Karma: 41
  • Sexo: Masculino
  • Todo es posible con esfuerzo, dedicación e interés
    • Ver Perfil
    • PanamaDev
[Aporte] Clase para Registrar usuarios
« en: 17 de Enero de 2011, 20:05:46 pm »
A continuación les muestro una clase en la que estoy trabajando, esta es sólo la parte más simple, ya que solo permite registrar nombre de usuario y contraseña, sin ningún dato adicional. Las columnas de la base de datos irán representadas por el atributo $cols que contiene "columna_1, columna_2", en este caso puse: "user, pass".

Register.php
Código: [Seleccionar]
<?php
/* Creamos las clases de las excepciones que se puedan producir en tiempo de ejecución */
//Indica que el usuario existe
class UserExistsException extends Exception{}
//Indica que las contraseñas no coinciden
class PassDontMatchException extends Exception{}

class 
Register{
private $username//String
private $password//String
private $sql//Object
private $table//String
private $cols//String

//Método constructor
public function __construct(){
$this->cols "user, pass";
}

//Asigna el objeto de la base de datos MySQLi y el nombre de la tabla a utilizar
public function setSQL($sqlObject$tableName){
$this->sql $sqlObject;
$this->table $tableName;
}

//Asigna los datos a almacenar en la tabla de usuarios
public function setData($user$pass){
$this->username htmlspecialchars($this->sql->real_escape_string($user));
$this->password md5($this->sql->real_escape_string($pass));
}

//Comprueba si el usuario existe en la base de datos, si existe arroja una excepción UserExistsException
public function checkUser(){
$query $this->sql->query("SELECT * FROM ".$this->table." WHERE user =&#39;".$this->username."&#39;;");
if($query->fetch_row())
throw new UserExistsException();
}

//Comprueba si las contraseñas coinciden, de lo contrario arroja una excepción del tipo PassDontMatchException
public function checkPass($pass2){
if($this->password != md5($pass2))
throw new PassDontMatchException();
}

//Método que se encarga de registrar al nuevo usuario en la base de datos
public function registerUser(){
$this->sql->query("INSERT INTO ".$this->table." (".$this->cols.") VALUES (&#39;".$this->username."&#39;, &#39;".$this->password."&#39;);");
}
}
?>

Y ahora veremos como utilizar esta sencilla clase.

registro.php
Código: [Seleccionar]
<form method="post">
Nombre: <input type="text" name="user" /><br />
Contraseña: <input type="password" name="pass" /><br />
Vuelve a escribir contraseña: <input type="password" name="pass2" /><br />
<input type="submit" name="submit" value="Registrar" />
</form>

<?php
require_once(&#39;Register.php&#39;);

//Iniciar el proceso sólo si ha sido presionado el botón de Registrar
if(isset($_POST[&#39;submit&#39;])){
//Instanciamos el objeto de la conexión a MySQLi
$sql = new mysqli(&#39;tu_host&#39;, &#39;tu_usuario&#39;, &#39;tu_contraseña&#39;, &#39;tu_base_de_datos&#39;);

//Instanciamos el objeto de la clase Register
$reg = new Register();

//Asignamos el objeto de MySQLi y nombre de la tabla
$reg->setSQL($sql, &#39;users&#39;);

if(!empty($_POST[&#39;user&#39;]))
if(!empty($_POST[&#39;pass&#39;]))
{ //Asignar el nombre de usuario y contraseña a procesar
$reg->setData($_POST[&#39;user&#39;], $_POST[&#39;pass&#39;]);

//Iniciar el bloque Try para el manejo de excepciones
try{
//Comprobar si el usuario existe
$reg->checkUser();
//Comprobar si ambas contraseñas coinciden
$reg->checkPass($_POST[&#39;pass2&#39;]);
//Registrar el nuevo usuario
$reg->registerUser();
//Manejar la excepción UserExistsException
} catch(UserExistsException $e){
//Aquí se coloca lo que se hace si el usuario existe
echo &#39;EL USUARIO YA EXISTE&#39;;
//Manejar la excepción PassDontMatchException
} catch(PassDontMatchException $e){
//Aquí se coloca lo que se hace si las contraseñas no coinciden
echo &#39;LAS CONTRASEÑAS NO COINCIDEN&#39;;
}
}
else
exit(&#39;Debe escribir una contraseña&#39;);
else
exit(&#39;Debe escribir un nombre de usuario&#39;);
?>



Cualquier cosa que no comprendan, pregunten. No explico mucho en este código porque me gustaría que ustedes mismos busquen decodificarlo y comprenderlo lo mejor posible porque sé que para muchos verán pequeñas cosas que jamás hayan experimentado. Y en sí el código es "simple", es decir que si lo sigues al pie de la letra entenderás al menos lo que hace.

Saludos!

Comunidad PHPeros

[Aporte] Clase para Registrar usuarios
« en: 17 de Enero de 2011, 20:05:46 pm »

Desconectado Siquillote

  • PHPero Master
  • ******
  • Mensajes: 4.229
  • Karma: 179
  • Sexo: Masculino
    • Ver Perfil
Re:[Aporte] Clase para Registrar usuarios
« Respuesta #1 en: 17 de Enero de 2011, 21:08:41 pm »

Sobre todo simple... (Nótese a la ironía) jajaja. Lo he estado viendo y para mi esta muy bien, por mi parte te llevas de momento un K+. Luego si algún día veo la necesitad de programar en poo y veo que mi intento es fallido, quizá coja el tuyo si no te importa :$

#Fdo. Physlet

Desconectado Fermin

  • PHPero Experto
  • *****
  • Mensajes: 783
  • Karma: 7
  • Sexo: Masculino
  • Nada que decirte.
    • Ver Perfil
Re:[Aporte] Clase para Registrar usuarios
« Respuesta #2 en: 17 de Enero de 2011, 21:26:52 pm »
Tremendo aporte, gracias por el!

saludos

Desconectado Physlet

  • PHPero Experto
  • *****
  • Mensajes: 822
  • Karma: 41
  • Sexo: Masculino
  • Todo es posible con esfuerzo, dedicación e interés
    • Ver Perfil
    • PanamaDev
Re:[Aporte] Clase para Registrar usuarios
« Respuesta #3 en: 18 de Enero de 2011, 05:59:15 am »
Sobre todo simple... (Nótese a la ironía) jajaja. Lo he estado viendo y para mi esta muy bien, por mi parte te llevas de momento un K+. Luego si algún día veo la necesitad de programar en poo y veo que mi intento es fallido, quizá coja el tuyo si no te importa :$
Si yo fuera tú, intentara ver la necesidad de programar en POO siempre.
Lo menos común es el manejo de excepciones que he aplicado y quizás también el cómo manipulo la instancia de MySQLi. El objetivo de este código es que se vayan familiarizando poco a poco con el manejo de excepciones :P

Conectado naveda

  • Administrador General
  • PHPero Master
  • *****
  • Mensajes: 2.282
  • Karma: 165
  • Sexo: Masculino
    • Ver Perfil
    • naveda.me
Re:[Aporte] Clase para Registrar usuarios
« Respuesta #4 en: 18 de Enero de 2011, 12:15:01 pm »
Me ha encantado, uso de muchos conceptos y bien aplicados. K+!
Por favor, leete las Normas


Desconectado javipilo

  • PHPero Experto
  • *****
  • Mensajes: 975
  • Karma: 31
  • Sexo: Masculino
    • Ver Perfil
Re:[Aporte] Clase para Registrar usuarios
« Respuesta #5 en: 18 de Enero de 2011, 15:23:38 pm »
La verdad yo nunca uso POO lo veo igual que código con ifs, uso funciones eso si...

Igualmente +K

Saludos

Desconectado Physlet

  • PHPero Experto
  • *****
  • Mensajes: 822
  • Karma: 41
  • Sexo: Masculino
  • Todo es posible con esfuerzo, dedicación e interés
    • Ver Perfil
    • PanamaDev
Re:[Aporte] Clase para Registrar usuarios
« Respuesta #6 en: 18 de Enero de 2011, 16:30:15 pm »
La verdad yo nunca uso POO lo veo igual que código con ifs, uso funciones eso si...
Existen muchas formas de crear una aplicación que haga exactamente lo mismo. La diferencia es que he intentado hacer el código más reutilizable, comprensible y corto posible. Gracias por el K+.

Me ha encantado, uso de muchos conceptos y bien aplicados. K+!
Muchas gracias :P!

Desconectado dengueMayuscula

  • PHPerit@
  • *
  • Mensajes: 1
  • Karma: 0
  • Nuev@ PHPer@
    • Ver Perfil
Re:[Aporte] Clase para Registrar usuarios
« Respuesta #7 en: 12 de Junio de 2011, 23:01:58 pm »
Perdoná la molestia pero donde pongo los datos de mi base?
No seria más fácil aclarar variables aparte para que sea fácil la modificación?

Esto de orientarme a objetos me esta jodiendo...

Desconectado Juanda

  • PHPer@
  • **
  • Mensajes: 82
  • Karma: 2
  • Programador general de sistemas opuestos.
    • Ver Perfil
Re:[Aporte] Clase para Registrar usuarios
« Respuesta #8 en: 13 de Junio de 2011, 04:14:34 am »
Perdoná la molestia pero donde pongo los datos de mi base?
No seria más fácil aclarar variables aparte para que sea fácil la modificación?

Esto de orientarme a objetos me esta jodiendo...

Haciendo un include al archivo conectar.php que tienes que crear.
Programador general de sistemas opuestos.