Una de las mejores formas de interactuar con las personas que visitan tu pagina es por medio de un sistema que permita registrarlos y mostrarle contenido exclusivo, existen muchos scripts en PHP donde se usan bases de datos que quizás pueden ser complejas para una persona que recién está comenzando con esto de las webs, en esta guía vamos a crear un sistema de ingreso totalmente ORIGINAL desde cero sin la necesidad de tener bases de datos MySQL.
No cabe duda que la manera más segura de hacer un sistema de ingreso es usando MySQL, así que vamos a comenzar con los pros y los contras de este sistema de ingreso:
Si te asustaste con los contras y quieres saber mi opinión, aquí la tienes: Si no te quieres liar mucho la vida y solo estas buscando que los usuarios se registren para ver contenido, te recomiendo 100% este sistema de ingreso.
Que van a poder hacer los usuarios registrados?
Los usuarios que se registren en este sistema de ingreso van a poder realizar cualquiera de las siguientes acciones:
Que NO va a tener este sistema de usuarios
Aquí te coloco alguna de las cosas que NO vamos a hacer con este sistema de registro:
Basta de tanto escribir y vamos a comenzar con la planificación de la estructura de nuestro sistema de usuarios, para eso te coloco aquí una pequeña imagen que te puede ilustrar más o menos que se quiere hacer:

*Obviamente aquí no tomamos en cuenta el archivo donde van a estar nuestros usuarios
Para lograr tu sistema de ingreso solo necesitas una página web y un programa para editar código PHP (aunque con el bloc de notas también puedes lograrlo).
Arriba dijimos que no íbamos a usar bases de datos MySQL para almacenar a nuestros usuarios, sin embargo necesitamos un lugar donde guardar a los mismos, eso vamos a hacerlo de la siguiente manera:
Crea una Nueva Carpeta llamada Usuarios, ahí crea un nuevo archivo PHP desde tu editor de código y añade lo siguiente a esa página:
1 | <?php die('Disculpa, No recargues esta página directamente!!')?> |
*Es importante que dejes un salto de línea después del código de arriba, algo como la imagen de abajo
Guarda ese archivo como Usuarios.php, y lo que tenemos ahí es el archivo donde se van a guardar a los usuarios, el código que ves, simplemente evita que se recargue la pagina directamente para prevenir que cualquiera pueda ver los e-mails y los nombres de usuarios de tu web (el password va a estar encriptado).
![]()
Ya terminamos con la carpeta de usuarios, ahí no vas a agregar nada más.
Crea una nueva página llamada registrarse.php, aquí vamos a colocar el formulario que va a permitir a los usuarios registrarse en nuestra página:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <!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=iso-8859-1" /> <title>Registrate</title> </head> <body> <h1>Registrate</h1> <form action="registro.php" method="POST"> <p> <label for="nombre">*Nombre de Usuario</label> <label for="campo1"><input name="nombre" type="text" value=""/></label> </p> <p> <label for="email">*Email</label> <label for="campo2"><input name="email" type="text" value=""/></label> </p> <p> <label for="password">*Password</label> <label for="campo3"><input name="pass" type="password" value=""/></label> </p> <p> <label for="passwordrepe">Repite el Password</label> <label for="campo4"><input name="passrepet" type="password" value=""/></label> </p> <p> <input name="submit" type="submit" value="Registrarme"/> </p> </form> </body> </html> |
*Es importante que el “action”, el “method” y los “names” de los formularios NO varíen
Es hora de crear uno de los archivos más complejos de nuestro sistema de ingreso, es el que procesa los datos del registro y realiza la inscripción de los usuarios en nuestro archivo usado como base de datos. Crea un nuevo archivo y llámalo como registro.php. Este archivo va a tener tres partes fundamentales:
1- Definición de constantes
2- Frenar el registro en caso de error
3- Registrar al usuario
En esta parte vamos a definir algunas constantes que vamos a usar a lo largo de este archivo, simplemente para evitarnos la molestia de escribirlas siempre, veamos qué es lo primero:
1 2 3 4 5 6 7 8 9 | <?php /* * COMENZAMOS DEFINIENDO ALGUNAS VARIABLES */ $bd_usuarios = 'Usuarios/usuarios.php'; $nombre = $_POST['nombre']; $email = $_POST['email']; $password = $_POST['pass']; $passwordrep = $_POST['passrepet']; |
En la primera línea, abrimos el PHP, en la 2, 3 y 4 escribimos un comentario en PHP que nos ayuda a describir que es lo que estamos haciendo, luego definimos lo siguiente:
$bd_usuarios = Lugar donde se encuentra el archivo de los usuarios
$nombre = El nombre que el usuario escribió en el campo “nombre” del formulario
$email = El email que el usuario escribió en el campo “email” del formulario
$password = El password que el usuario escribió en el campo “pass” del formulario
$passwordrep = La repetición del password que el usuario escribió en el formulario (nos ayuda para que el usuario este seguro de la clave que coloco)
Hay muchos errores que se pueden presentar al momento de intentar el registro de usuarios, aquí vamos solo a definir los siguientes:
1- El archivo de usuarios no existe
2- El archivo de usuarios no es escribible (no tiene permisos de escritura)
3- El campo nombre este vacio
4- El campo email este vacio
5- El campo pastor este vacio
6- El password tiene menos de 4 caracteres
7- El password no coincide con la repetición del mismo
8- El email de usuario ya existe
9- El nombre de usuario ya existe
Son 9 errores para los cuales vamos a hacer lo siguiente:
ERROR 1
1 2 3 4 5 6 | /* * VAMOS A FRENAR EL REGISTRO SI EL ARCHIVO DE USUARIOS NO EXISTE */ if(!file_exists($bd_usuarios)){ $error['noExiste'] = 'Disculpa, pero el archivo de base de datos de usuarios no existe'; } |
*Simplemente usamos la funcion file_exist() para que si el archivo no existe, se defina una variable tipo Array (Matriz) con el error correspondiente.
ERROR 2
1 2 3 4 5 6 | /* * AHORA FRENAMOS EL CASO EN QUE NO SEA ESCRIBIBLE EL ARCHIVO DE USUARIOS */ if(!is_writable($bd_usuarios)) { $error['noEscribe'] = 'Disculpa, pero el archivo de base de datos no admite escritura'; } |
*Usamos la función is_writable() para que en caso de que el archivo no lo sea, se defina nuevamente la variable error
ERROR 3
1 2 3 4 5 6 | /* * SI EL CAMPO NOMBRE ESTA VACIO GENERAMOS ERROR */ if(empty($nombre)) { $error['nombreVacio'] = 'Disculpa, debes escribir un nombre de usuario'; } |
Aquí usamos la función empty() para ver si el campo esta vacio, en caso afirmativo, definimos la variable error
ERROR 4
1 2 3 4 5 6 | /* * SI EL CAMPO EMAIL ESTA VACIO GENERAMOS ERROR */ if(empty($email)) { $error['emailVacio'] = 'Disculpa, debes escribir un email'; } |
*Nuevamente usamos la función empty()
ERROR 4, 5 Y 6
1 2 3 4 5 6 7 8 9 10 11 12 | /* * LOS ERRORES DEL PASSWORD, QUE ESTE VACIO O QUE NO COINCIDAN O QUE SEA MENOR A 4 CARACTERES */ if(empty($password)) { $error['passwordVacio'] = 'Disculpa, debes escribir un password'; } elseif(strlen($password) <= 3) { $error['passwordCorto'] = 'Disculpa, el password debe ser de como minimo de 4 caracteres'; } elseif($password != $passwordrep) { $error['passwordNoCoincide'] = 'Disculpa, los dos password deben coincidir'; } |
*Primero checamos con la función empty() que el campo password no esté vacio, si lo está, definimos la variable error, si no lo está, checamos que: 1- El password sea de como mínimo 4 caracteres con la función srtlen(), si no lo es, definimos la variable error. 2- Si el password es diferente a la repetición del password, definimos la variable error
ERROR 8
1 2 3 4 5 6 7 8 9 10 11 12 | /* * AQUI CHECAMOS QUE EL EMAIL DE USUARIO NO EXISTA */ $contenido_verificacion = file_get_contents($bd_usuarios); $array_verificacion = explode('||', $contenido_verificacion); $cuento_los_usuarios = count($array_verificacion); for($i = 0; $i <= $cuento_los_usuarios; $i++) { $exploto_usuarios = explode('|', $array_verificacion[$i]); if($email == $exploto_usuarios[4]) { $error['EmailExistente'] = 'Disculpa, ese email ya ha sido registrado'; } } |
*Las líneas 4, 5 y 6 son para establecer constantes que nos ayudaran con los errores 8 y 9, en ellas, obtenemos el contenido del archivo usuarios.php, luego establecemos un array con todos los usuarios, contamos cuantos hay y repetimos el for tantas veces como usuarios estén registrados, el for lo que hace es nuevamente crear un array con los datos de un usuario y verifica que si el email coincide con el email registrado, genere un error.
ERROR 9
1 2 3 4 5 6 7 8 9 | /* * AQUI CHECAMOS QUE EL NOMBRE NO EXISTA */ for($i = 0; $i <= $cuento_los_usuarios; $i++) { $exploto_usuarios = explode('|', $array_verificacion[$i]); if($nombre == $exploto_usuarios[2]) { $error['NombreExistente'] = 'Disculpa, ese nombre ya ha sido registrado'; } } |
*Establecemos otro for pero en este caso para checar que si los nombres coinciden, se genere un error
Si no está definida la variable $error es porque no han ocurrido errores en el registro (un poco de lógica aquí), en ese caso vamos a registrar al usuario de la siguiente manera:
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * SI NO HAY ERROR, REGISTRAMOS EL USUARIO */ if(empty($error)) { $contenido_usuarios = file_get_contents($bd_usuarios); $array_usuarios = explode('||', $contenido_usuarios); $cuento_usuarios = count($array_usuarios); $abro = fopen($bd_usuarios, 'a+'); fwrite($abro, filemtime($bd_usuarios)."|$cuento_usuarios|$nombre|".md5($password)."|$email||"); fclose($abro); $mensaje = 'Usuario Registrado con Exito'; } ?> |
*Primero establecemos que el error este vacío, luego en la línea 5 obtenemos el contenido del archivo de usuarios, en la línea 6 creamos un array por cada usuario, en la línea 7 contamos cuantos usuarios hay (estas tres líneas nos permiten luego establecer que numero de usuario corresponde al nuevo registrado). En la línea 8 abrimos el archivo de usuarios para la escritura, en la línea 9 usamos la función fwrite() para escribir en el archivo de usuarios lo siguiente:
filemtime(): Esto nos va a generar unos números que nos ayudan a ubicarnos mejor en los arrays de datos|$cuento_usuarios: nos coloca el numero que corresponde al nuevo usuario registrado|$nombre: el nombre de usuario|md5($password): El password del usuario encriptado con la función md5()|$email: El email del usuario, luego finalizamos con dos barras “||” que van a ser las que delimiten a un usuario de otro.
En la línea 10 cerramos el archivo de usuarios y en la línea 11 definimos un mensaje para informar del registro correcto. En la línea 13 cerramos el php (esto es importante)
Al final de este archivo vamos a agregar lo siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <!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=iso-8859-1" /> <title>Registrate</title> </head> <body> <h1>Registrate</h1> <?php if($error) { foreach ($error as $advertencia){ echo $advertencia; echo '<br />'; } } if($mensaje) { echo $mensaje; } ?> </body> </html> |
*Si hay errores, los mostramos con un foreach y si hay mensaje (es decir que el registro es correcto) mostramos el mismo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | <?php /* * COMENZAMOS DEFINIENDO ALGUNAS VARIABLES */ $bd_usuarios = 'Usuarios/usuarios.php'; $nombre = $_POST['nombre']; $email = $_POST['email']; $password = $_POST['pass']; $passwordrep = $_POST['passrepet']; /* * VAMOS A FRENAR EL REGISTRO SI EL ARCHIVO DE USUARIOS NO EXISTE */ if(!file_exists($bd_usuarios)){ $error['noExiste'] = 'Disculpa, pero el archivo de base de datos de usuarios no existe'; } /* * AHORA FRENAMOS EL CASO EN QUE NO SEA ESCRIBIBLE EL ARCHIVO DE USUARIOS */ if(!is_writable($bd_usuarios)) { $error['noEscribe'] = 'Disculpa, pero el archivo de base de datos no admite escritura'; } /* * SI EL CAMPO NOMBRE ESTA VACIO GENERAMOS ERROR */ if(empty($nombre)) { $error['nombreVacio'] = 'Disculpa, debes escribir un nombre de usuario'; } /* * SI EL CAMPO EMAIL ESTA VACIO GENERAMOS ERROR */ if(empty($email)) { $error['emailVacio'] = 'Disculpa, debes escribir un email'; } /* * LOS ERRORES DEL PASSWORD, QUE ESTE VACIO O QUE NO COINCIDAN O QUE SEA MENOR A 4 CARACTERES */ if(empty($password)) { $error['passwordVacio'] = 'Disculpa, debes escribir un password'; } elseif(strlen($password) <= 3) { $error['passwordCorto'] = 'Disculpa, el password debe ser de como minimo de 4 caracteres'; } elseif($password != $passwordrep) { $error['passwordNoCoincide'] = 'Disculpa, los dos password deben coincidir'; } /* * AQUI CHECAMOS QUE EL EMAIL DE USUARIO NO EXISTA */ $contenido_verificacion = file_get_contents($bd_usuarios); $array_verificacion = explode('||', $contenido_verificacion); $cuento_los_usuarios = count($array_verificacion); for($i = 0; $i <= $cuento_los_usuarios; $i++) { $exploto_usuarios = explode('|', $array_verificacion[$i]); if($email == $exploto_usuarios[4]) { $error['EmailExistente'] = 'Disculpa, ese email ya ha sido registrado'; } } /* * AQUI CHECAMOS QUE EL NOMBRE NO EXISTA */ for($i = 0; $i <= $cuento_los_usuarios; $i++) { $exploto_usuarios = explode('|', $array_verificacion[$i]); if($nombre == $exploto_usuarios[2]) { $error['NombreExistente'] = 'Disculpa, ese nombre ya ha sido registrado'; } } /* * SI NO HAY ERROR, REGISTRAMOS EL USUARIO */ if(empty($error)) { $contenido_usuarios = file_get_contents($bd_usuarios); $array_usuarios = explode('||', $contenido_usuarios); $cuento_usuarios = count($array_usuarios); $abro = fopen($bd_usuarios, 'a+'); fwrite($abro, filemtime($bd_usuarios)."|$cuento_usuarios|$nombre|".md5($password)."|$email||"); fclose($abro); $mensaje = 'Usuario Registrado con Exito'; } ?> <!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=iso-8859-1" /> <title>Registrate</title> </head> <body> <h1>Registrate</h1> <?php if($error) { foreach ($error as $advertencia){ echo $advertencia; echo '<br />'; } } if($mensaje) { echo $mensaje; } ?> </body> </html> |
*Hasta aquí lo he probado todo en mi PC y funciona correctamente, de todas formas deja un mensaje en caso de que consigas algún error.
Con estos archivos, vamos a tener listo el registro de los usuarios en nuestra página web, en el siguiente capítulo vamos a crear un archivo que permita a los usuarios iniciar sesión.
Si no le quieres perder el hilo a esta serie de tutoriales, puedes seguirnos en Twitter o también vía RSS
Mijael es el creador y editor de skyandstars.net donde publica guias y tutoriales sobre WordPress, Cutenews, PHP, HTML y mucho más. Acutalmente estudiante universitario.
Leonardo
29 Enero 2010
Estos temas de registros son muy interesantes gracias.. ojala luego enseñes con bases de datos!!
Mijael
29 Enero 2010
Si leonardo, la verdad estos temas son muy buenos como dices, me anime a hacer este, en parte porque es un poco mas facil y no se necesita ser un experto en PHP para lograrlo. Saludos!!
miapa
31 Enero 2010
Ojala termines este tutorial muy pronto!! es que estoy en medio de un proyecto.. muchas gracias..
una duda se podria hacer que een el cutenews no mas puedan comentar las personas que esten registradas en la web?? mediante este sistema!!
muchas gracias por la atencion…
Mijael166
31 Enero 2010
Estaba pensando usarlo para que solo usuarios registrados puedan ver las noticias en cutenews, no habia pensado en solo usuarios registrados comentar, dejame que termine el sistema y luego veo que se puede hacer con Cutenews…Gracias por la idea!!
miapa
31 Enero 2010
jeje de nada!! eso pasa cuando son varios webmaster q unen cabezas!! espero acabes rapido lo de registro!!
Mijael166
1 Febrero 2010
Por fin ya pude terminar el sistema de ingreso, ahora voy con la parte dos del tutorial y en la tres nos metemos de lleno con los usos que le vamos a poder dar!! Saludos miapa
Cande
4 Febrero 2010
Disculpa, en esta parte:
“Crea una Nueva Carpeta llamada Usuarios, ahí crea un nuevo archivo PHP desde tu editor de código y añade lo siguiente a esa página…”
Como llamamos al archivo PHP?
Mijael
4 Febrero 2010
Yo lo llame usuarios.php, me falto colocarlo ahi pero si ves el archivo registro.php ves que llame la ruta del archivo “Usuarios/usuarios.php” saludos cande!!!
Erick
25 Febrero 2010
muye bueno tu manual y me servira de mucho :)
pero tengo el siguiente problema. al ejecutarlo me lanza este mensaje
“Fatal error: Call to undefined function: file_get_contents() in c:\foxserv\www\usuarios\registro.php on line 50″
entonces el problema es en esta linea
$contenido_verificacion = file_get_contents($bd_usuarios);
pero no se como arreglarlo.
me ayudas por favor.
saludos
Mijael
25 Febrero 2010
Hola erick, estas seguro que definiste bien a la variable $bd_usuarios bien en la linea 5? Quizas no escribiste bien la ruta del archivo y por eso la funcion no encuentra contenido que leer. Verificalo y me dices.
alex
7 Marzo 2010
yo quisiera que me ayudes a crear un systema de comentario en flash te agradeseria
Mijael166
7 Marzo 2010
Lamentablemente no se nada de flash, disculpa.