Crear sistema de ingreso de usuarios sin base de datos (1era Parte)

Crear sistema de ingreso de usuarios sin base de datos (1era Parte)

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:

Puntos a Favor

  1. No necesitas bases de datos
  2. No necesitas saber códigos ni comandos SQL que quizás pueden ser un poco complejos
  3. Fácil de Crear
  4. Funciona Perfectamente

Puntos en Contra

  1. Quizás puede llegar a ser un poco inestable (Algo más o menos como lo que pasa con CuteNews)
  2. Menos seguro que bases de datos MySQL

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:

  1. Editar su información personal (E-mail y Nombre de Usuario)
  2. Ver contenido exclusivo

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:

  1. El administrador del blog NO va a poder eliminar cuentas, al menos que elimine manualmente los mismo desde el archivo de usuarios
  2. NO van a haber diferentes rangos de usuarios salvo los establecidas como usuario registrado o no

Comenzando con la planificación

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

Que necesito?

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).

Paso 1: Creación del archivo donde se guardan los usuarios

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.

Paso 2: Creación de la pagina con el formulario de ingreso

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

Paso 3: Creación del archivo que procesa el formulario

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

Definición de constantes

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)

Frenar el registro en caso de error

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

Registrar al usuario

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)

El aspecto en el que se muestran los errores o el mensaje de registro

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.

Archivo de registro.php completo

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.

Mijael166

Quizas alguna de estas entradas te pueda interesar

12 Comentarios en "Crear sistema de ingreso de usuarios sin base de datos (1era Parte)"

  1. 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!!

  2. 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…

  3. 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!!

  4. 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

  5. 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?

  6. 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!!!

  7. 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.

  8. alex

    7 Marzo 2010

    yo quisiera que me ayudes a crear un systema de comentario en flash te agradeseria

  9. Mijael166

    7 Marzo 2010

    Lamentablemente no se nada de flash, disculpa.

Deja un Comentario

Nombre (Requerido)

Email (Requerido pero no publicado)

Web

Comentario (Requerido)

*Tu E-mail es usado para relacionarlo con tu cuenta en Gravatar