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
<?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 ='".$this->username."';");
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 ('".$this->username."', '".$this->password."');");
}
}
?>
Y ahora veremos como utilizar esta sencilla clase.
registro.php
<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('Register.php');
//Iniciar el proceso sólo si ha sido presionado el botón de Registrar
if(isset($_POST['submit'])){
//Instanciamos el objeto de la conexión a MySQLi
$sql = new mysqli('tu_host', 'tu_usuario', 'tu_contraseña', 'tu_base_de_datos');
//Instanciamos el objeto de la clase Register
$reg = new Register();
//Asignamos el objeto de MySQLi y nombre de la tabla
$reg->setSQL($sql, 'users');
if(!empty($_POST['user']))
if(!empty($_POST['pass']))
{ //Asignar el nombre de usuario y contraseña a procesar
$reg->setData($_POST['user'], $_POST['pass']);
//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['pass2']);
//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 'EL USUARIO YA EXISTE';
//Manejar la excepción PassDontMatchException
} catch(PassDontMatchException $e){
//Aquí se coloca lo que se hace si las contraseñas no coinciden
echo 'LAS CONTRASEÑAS NO COINCIDEN';
}
}
else
exit('Debe escribir una contraseña');
else
exit('Debe escribir un nombre de usuario');
?>
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!