Ver Mensaje Individual
  #8 (permalink)  
Antiguo 23/01/2011, 07:18
Avatar de Nazari
Nazari
 
Fecha de Ingreso: febrero-2010
Ubicación: Canarias - Tenerife
Mensajes: 62
Antigüedad: 14 años, 2 meses
Puntos: 7
Respuesta: Creando un CMS

A estas alturas ya tenemos instalado nuestro CMS y preparada la mecánica de nuestro entorno modular, ademas en la instalación definimos un único usuario, que hará de administrador, pero ¿que hacemos si queremos permitir registrar mas usuarios? Pues haremos un sistema de registro :P .

Anteriormente creamos una script en includes/ llamada register.php, nos dirigimos a ella y empezamos a preparar nuestro sistema de registro.

La script register.php va a tener dos partes, una de ellas es el formulario de registro en xhtml y la otra parte servirá para procesar el envío, para esto usaremos if().
Yo estoy a favor de usar todas las script que necesite de forma que las llames cuando te hagan falta siempre dentro de un limite, pero en este caso crear dos archivos separados para un registro no lo veo realmente útil.

Dentro de register.php y siempre debajo de

Código PHP:
Ver original
  1. if (!defined('CAPRICORN')){
  2.   header('Location: index.php');
  3. }

comenzamos nuestro script, siempre debajo porque lo primero que se debe de comprobar es que la constante esta definida para evitar problemas de seguridad.

Añadimos un if() muy simple que controle el valor ‘submit‘ que entra por _POST, si $_POST['submit'] existe procesamos el envío, si no es así presentamos el formulario de registro, seria algo así:

Código PHP:
Ver original
  1. if(isset($_POST['submit'])){
  2.  
  3.   //Ahora procesamos el envio
  4.  
  5. }else{
  6.  
  7.   //Mostramos el formulario
  8.  
  9. }

Ahora dentro del if() en la primera parte que es la que se muestra si se envió el formulario añadimos diferentes parámetros que usaremos de requisitos para el registro, yo lo usare para controlar el máximo y el mínimo de caracteres del usuario y contraseña, pero hay muchas mas posibilidades dependiendo de lo que quieras controlar, también habría que comprobar si el email es valido mediante expresiones regulares, pero por el momento lo dejamos así.

Código PHP:
Ver original
  1. $user_min_len = 4;
  2.   $user_max_len = 32;
  3.   $pass_min_len = 6;
  4.   $pass_max_len = 32;


Una vez definidas las variables pasamos a comprobar que al enviar el formulario se rellenaron todos los campos y que ademas de estar rellenos cumplen con nuestros requisitos, para eso usaremos las funciones empty() y la función strlen() la cual cuenta el numero de caracteres, y en caso de no cumplir lo que buscamos definimos la variable $return = 1. Algo así:

Código PHP:
Ver original
  1. //Comprobamos que el campo usuario no este vacio.
  2.   if(!empty($_POST['user_name'])){
  3.  
  4.     //Comprobamos que cumplan los requisitos que definimos
  5.     if((strlen($_POST['user_name']) < $user_min_len)||(strlen($_POST['user_name']) > $user_max_len)){
  6.       echo "El usuario no puede ser menor de ".$user_min_len." ni mayor de ".$user_max_len." letras. <br />";
  7.       $return = 1;
  8.     }
  9.   }else{
  10.  
  11.     //En caso de que este vacío
  12.     echo "Tienes que rellenar el campo de usuario <br />";
  13.     $return = 1;
  14.  
  15.   }

Debemos de hacer igual pero para el campo password, que sera el que almacene la contraseña, y para el campo email, pero en el caso del correo electrónico solamente comprobaremos que no esta vacío.

Lo siguiente sera comprobar que el nombre de usuario no este ya registrado, asi evitamos errores con la base de datos, para ello hacemos una consulta a la base de datos de la siguiente forma:

Código PHP:
Ver original
  1. //Comprobamos en la base de datos que no existe ya el usuario
  2.   $sql = mysql_query("SELECT * FROM users WHERE user='".$_POST['user_name']."'");
  3.   if($user_ok = mysql_fetch_array($sql)) //si existe pedimos uno nuevo.
  4.   {
  5.       echo "El usuario ya existe <br />";
  6.       $return = 1;
  7.   }

La ultima comprobación que hacemos aquí es si la variable $return fue definida, puesto que si se definió significa que hubo alguna incidencia, si no la hubo registramos al usuario, pasamos por md5() la contraseña y terminamos con el procesos del formulario.

Código PHP:
Ver original
  1. //Nos aseguramos de que la variable return no se haya definido para poder continuar
  2.   if(isset($return)){
  3.     echo "<br /><a href=\"index.php?sec=registro\">Volver al Formulario</a>";
  4.   }else{
  5.  
  6.     //Introducimos los datos del nuevo usuario en la base de datos
  7.     mysql_query("INSERT INTO users (user, pass, email, date, status) values ('".$_POST['user_name']."','".$_POST['password']."','".$_POST['email']."','".time()."','1')")or die(mysql_error());
  8.     echo "Usuario registrado correctamente";
  9.     echo "<br /><a href=\"index.php\">Volver al Indice</a>";
  10.   }

Ya podemos olvidarnos de esta parte del script, ahora nos centramos en el formulario, el cual ha de ser muy simple, solamente pedimos usuarios, contraseña y email, y enviamos el resultado a index.php?sec=registro, este podría ser el resultado final de nuestro script de registro:

register.php:

Código PHP:
Ver original
  1. <?php
  2.  
  3. //Si el script se ejecuta de forma separada a index.php redireccionamos al index.
  4. if (!defined('CAPRICORN')){
  5.   header('Location: index.php');
  6. }
  7.  
  8. //Comprobamos que se envió el fomulario
  9. if(isset($_POST['submit'])){
  10.  
  11.   //Definimos requisitos de maximo y minimo de usuario y contraseña
  12.   $user_min_len = 4;
  13.   $user_max_len = 32;
  14.   $pass_min_len = 6;
  15.   $pass_max_len = 32;
  16.  
  17.   //Comprobamos que el campo usuario no este vacio.
  18.   if(!empty($_POST['user_name'])){
  19.  
  20.     //Comprobamos que cumplan los requisitos que definimos
  21.     if((strlen($_POST['user_name']) < $user_min_len)||(strlen($_POST['user_name']) > $user_max_len)){
  22.       echo "El usuario no puede ser menor de ".$user_min_len." ni mayor de ".$user_max_len." letras. <br />";
  23.       $return = 1;
  24.     }
  25.   }else{
  26.  
  27.     //En caso de que este vacio
  28.     echo "Tienes que rellenar el campo de usuario <br />";
  29.     $return = 1;
  30.  
  31.   }
  32.  
  33.   //Comprobamos que el campo contraseña no este vacio
  34.   if(!empty($_POST['password'])){
  35.  
  36.     //Comprobamos que cumplan los requisitos que definimos
  37.     if((strlen($_POST['password']) < $pass_min_len)||(strlen($_POST['password']) > $pass_max_len)){
  38.       echo "La Contraseña no puede ser menor de ".$user_min_len." ni mayor de ".$user_max_len." letras. <br />";
  39.       $return = 1;
  40.     }
  41.   }else{
  42.  
  43.     //En caso de que este vacio
  44.     echo "Tienes que rellenar el campo de Constraseña <br />";
  45.     $return = 1;
  46.  
  47.   }
  48.  
  49.   //Comprobamos que el campo email este vacio
  50.   if(empty($_POST['email'])){
  51.  
  52.     //En caso de que este vacio
  53.     echo "Tienes que rellenar el campo de Email <br />";
  54.     $return = 1;
  55.  
  56.   }
  57.  
  58.   //Comprobamos en la base de datos que no existe ya el usuario
  59.   $sql = mysql_query("SELECT * FROM users WHERE user='".$_POST['user_name']."'");
  60.   if($user_ok = mysql_fetch_array($sql)) //si existe pedimos uno nuevo.
  61.   {
  62.       echo "El usuario ya existe <br />";
  63.       $return = 1;
  64.   }
  65.  
  66.  
  67.   //Nos aseguramos de que la variable return no se haya definido para poder continuar
  68.   if(isset($return)){
  69.     echo "<br /><a href=\"index.php?sec=registro\">Volver al Formulario</a>";
  70.   }else{
  71.  
  72.     //Introducimos los datos del nuevo usuario en la base de datos
  73.     mysql_query("INSERT INTO users (user, pass, email, date, status) values ('".$_POST['user_name']."','".$_POST['password']."','".$_POST['email']."','".time()."','1')")or die(mysql_error());
  74.     echo "Usuario registrado correctamente";
  75.     echo "<br /><a href=\"index.php\">Volver al Indice</a>";
  76.   }
  77.  
  78.  
  79. }else{  //Mostramos el formulario de envio
  80.  
  81.   ?>
  82.   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  83.   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  84.   <html xmlns="http://www.w3.org/1999/xhtml">
  85.     <head>
  86.       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  87.       <link type="text/css" rel="stylesheet" media="all" href="style.css" />
  88.       <title>Registrar nuevo Usuario</title>
  89.     </head>
  90.     <body>
  91.     <div id="install">
  92.       <form action="index.php?sec=registro" method="post">
  93.       <div id="install-title">Registro de Nuevos Usuarios</div>
  94.       <table>
  95.         <tr><td colspan="2" class="install-td">Datos del Usuario</td></tr>
  96.         <tr><td>Nombre de Usuario:</td><td><input type="text" name="user_name" value="Usuario" /></td></tr>
  97.         <tr><td>Contraseña:</td><td><input type="text" name="password" value="Contraseña" /></td></tr>
  98.         <tr><td>Correo Electrónico:</td><td><input type="text" name="email" value="Email" /></td></tr>
  99.         <tr><td colspan="2" class="install-td"><input type="submit" name="submit" value="Registrar" /></td></tr>
  100.       </table>
  101.       </form>
  102.     </div>
  103.     </body>
  104.   </html>
  105.  
  106.   <?
  107.  
  108. }
  109.  
  110. ?>

Ahora que tenemos como registrar usuarios, necesitaremos donde hacer ‘Login‘ y ‘Logout‘ del sistema, pero eso lo explicare en otra entrada. Podéis bajar todos los script hasta el momento aquí.

Dudas, comentarios, criticas, sugerencias, etc… serán agradecidas!

Un Saludo.
__________________
Nazarí González
http://www.nazariglez.com - @Nazariglez