Muy buenas, amigos soy rOnNyLdInHo, y vengo a presentarles un Sistema de Registro de Usuarios para sus webs, hecha en PHP y con la ayuda de MySQL.
Inicio este manual diciendo rápidamente que un registro de usuarios es algo que se debe tener mucho cuidado. Ya que no es cualquier web, la que debe traerlo. Debes ser conciente que el Registro es para páginas con alto contenido, que llaman a muchas visitas, y que su monitorización es casi imposible sin un registro. Recuerden que si es para una "tontera" o para presumirle a sus amigos, quedarán con la muy desagradable huída de nuestro usuario.
El Sistema que hice posee rangos enumerados, vale rescatar que puedes cambiar dichos números(1-4) en PHPMyAdmin o con un script en PHP. Pero no lo explico aquí ya que el tema principal es el registro y no los rangos de usuarios. Luego haré uno de rangos.
Vamos a empezar con la Base de Datos
Muy importante rescatar que para instalar las tablas, lo puedes hacer de tres formas:
Windows:
1- Siempre que instalen MySQL en Windows, este producto vendrá con un Centro de Comando no gráfico en donde podrán escribir el comando siguiente para crear la tabla y sus valores.
Linux:
2- En Linux es muchos más sencillo(por supuesto, ;D).
Solo entran a la terminal, escriben
mysql -u root y listo tienen a MySQL a sus órdenes.
Cualquier Sistema Operativo:
3- Existe un programa excelente, que en lo personal, le ayuda mucho a los webmasters, se llama PHPMyAdmin y lo puedes conseguir gratis en su
página web oficial. Es como un MySQL solo que con entorno gráfico, lo que facilita la interacción con dicha Base de Datos.
usuarios.sqlCREATE TABLE `usuarios` (
`id` INT( 4 ) NOT NULL AUTO_INCREMENT ,
`user` VARCHAR( 255 ) NOT NULL ,
`pass` VARCHAR( 255 ) NOT NULL ,
`nivel` INT( 4 ) NOT NULL ,
`fecha_registro` VARCHAR( 255 ) NOT NULL ,
`hora_registro` VARCHAR( 255 ) NOT NULL ,
`IP` TINYTEXT NOT NULL ,
INDEX ( `id` )
) ENGINE = MYISAM ;No hay muchos qué explicar (o no en este tutorial...)
config.php: Nuestro motor
<?php
// Config.php es la página que nos va a conectar al Servidor y luego a la Base de Datos
$hostname = 'TU_HOST'; // Host (generalmente es localhost)
$user = 'TU_USER'; // Usuario de la base de datos (por defecto en MySQL es root)
$pass = 'PASSWORD'; // Contraseña de la base de datos (por defecto en MySQL se deja en blanco)
$dbnombre = 'BASEDEDATOS'; // Nombre de la Base de Datos en la que vas a trabajar
$error = '<a href="javascript: window.history.back()"><< Regresar a solucionar el problema</a>';// Mensaje de error y nos devuelve atrás
$rango = $_SESSION["nivel"];
// Conexión. Esta es la forma en que vamos a hacer la conexión.
$conexion = mysql_connect($hostname, $user, $pass);
if(!$conexion) {
echo 'Ha sido imposible conectarse con el servidor, por favor llena los datos de <b>config.php</b> e inténtalo de nuevo';
exit;
}
$db = mysql_select_db($dbnombre);
if(!$db) {
echo 'Ha sido imposible conectarse a la Base de Datos que proporcionaste, favor verifica si existe o si es correcta la que escribiste';
exit;
}
// Aqui comenzamos la sesión
session_start();
// Funciones
if($rango == 2) {
$rango = 'Moderador Global';
}
elseif($rango == 1) {
$rango = 'Administrador';
}
elseif($rango == 3) {
$rango = 'Moderador';
}
elseif($rango == 4) {
$rango = 'Usuario';
}
?>Posee la conexión y algunas funciones
errores.php: Nos ahorra trabajo
<?php
// Es necesario llamar a config.php para que pueda entrar
// a revisar unas cuantas cosas en la Base de Datos
require_once('config.php');
// Empezamos....
/* Esta es la explicacion de cada funcion
Funcion1 = No dejar espacios en el nick
Funcion 2 = Nick de mas de 3 caracteres
Funcion 3 = No espacios en el nick
Funcion 4 = No repetir nick ya registrado
Funcion 5 = Contraseña con mas de 5 caracteres
Funcion 6 = Contraseña 1 y Contraseña2 deben ser iguales*/
$error = '<a href="javascript: window.history.back()"><< Regresar a solucionar el problema</a>';
/*Funcion 1*/if($_POST["user"] == "") {
echo 'Haz dejado el espacio de USER en blanco<br />' . $error . '';
exit;
}
/*Funcion 2*/if(strlen($_POST["user"]) < 3){
echo 'Lo siento pero el nick que escribiste(<b><i>' . $_POST["user"] . '</i></b>) contiene menos de 3 carcateres, por favor escribe uno más grande<br />' . $error . '';
exit;
}
/*Funcion 3*/if(stristr($_POST["user"], ' ') == TRUE) {
echo 'Lo siento pero el nick que escribiste(<b><i>' . $_POST["user"] . '</i></b>) posee espacios y no puede ser registrado<br />' . $error . '';
exit;
}
/*Funcion 4*/$sqlnickigual = mysql_query("SELECT * FROM `usuarios` WHERE user='" . $_POST["user"] . "'");
if(mysql_num_rows($sqlnickigual)) {
echo 'Lamentablemente el nombre de usuario que pusiste (<i><b>' . $_POST["user"] . '</b></i>), Ya está siendo usado por otra persona. Por favor regístrate con otro nombre.<br />' . $error . '';
exit;
}
/*Funcion 5*/if(strlen($_POST["password"]) < 5) {
echo 'Lo siento pero la contraseña que escribiste posee menos de 5 caracteres. Se recomienda poner una más larga<br />' . $error . '';
exit;
}
/*Funcion 6*/if ($_POST["password"] != $_POST["password2"]) {
echo 'Lo siento pero las contraseñas que escribiste no son iguales. Debes escribirlas igual<br />' . $error . '';
exit;
}
?>Verifica que todo esté correcto para poder registrar al usuario
index.php : Me identifica si el usuario está o o registrado
<?php
require_once('config.php');
if(isset($_SESSION["usuario"])) {
echo 'Bienvenido <b>' . $_SESSION["usuario"] . '</b><br />';
if($rango == 'Administrador') {
echo '<a href="pagAdmin.php">Página de Administrador</a> | ';
}
echo '<a href="perfil.php">Ir a tu Perfil</a> | <a href="logout.php">Cerrar Sesión</a>';
} else {
echo 'Bienvenido <b>Visitante</b><br />
Por favor <a href="register.php">regístrate</a> o <a href="login.php">loguéate</a>';
}
?>Incluye la función, Si es administrador le presento este link de pagAdmin que luego podrás configurar para agregar funciones administrativas.
Todo registro debe tener un login. Bueno eso a mi opinión si alguien tiene algo mejor que me lo diga.
login.php<!--Este código es únicamente
del formulario -->
<center>
<form action="login2.php" method="post" name="login">
<table border="1" cellpadding="3" cellspacing="5" width="100">
<tr><th>Nombre de Usuario:</th>
</tr><tr>
<th><input type="text" name="username" size="40" autocomplete="off" /></th>
</tr><tr>
<th>Password:</th>
</tr><tr>
<th><input type="password" name="password" size="40" autocomplete="off" /></th>
</tr><tr>
<th><input type="submit" name="ingresar" value="Entrar" /> | <input type="reset" value="Borrar Todo" /></th>
</tr>
</table>
</form>
</center>Este login es hecho en HTML, la interacción con la Base de Datos, la hice en login2. Puedes agregar el login2 aquí haciendo un solo archivo, pero por cuestiones de seguridad yo prefiero hacerlo de esta manera
login2.php: La que interactúa con la Base de Datos
<?php
//Llamamos a config
require_once('config.php');
// Iniciamos
$username = $_POST['username'];
$password = $_POST['password'];
if(isSet($_POST['ingresar'])) {
if(($username == "") or ($password == "")) {
echo 'No haz escrito tus datos, por favor escribe tus datos para poder entrar a la Web.<br />' . $error . '';
exit;
} else {
$sqlnoreguser = mysql_query("SELECT * FROM `usuarios` WHERE user='" . $_POST['username'] . "'");
if(!mysql_num_rows($sqlnoreguser)) {
echo 'Lo siento pero el nick que escribiste(<b><i>' . $_POST[usuario] . '</i></b>) aún no ha sido registrado en la web<br />' . $error . '';
exit;
}
$sqlnoregpass = mysql_query("SELECT * FROM `usuarios` WHERE pass='" . $_POST['password'] . "'");
if(!mysql_num_rows($sqlnoregpass)) {
echo 'Contraseña inválida, por favor revisa la contrase&ntide;a que escribiste<br />' . $error . '';
exit;
}
$sqllogin = mysql_query("SELECT * FROM usuarios WHERE user='$username' AND pass='$password'");
if($user_ok = mysql_fetch_array($sqllogin)) {
session_register("usuario"); //Registramos la sesión de usuario
session_register("idusuario"); //Registramos el ID de usuario
session_register("nivel"); //Registramos el nivel que tendrá el usuario
// Le damos los valores a las variables
$_SESSION["usuario"] = $user_ok["user"]; //damos el nick a la variable usuario
$_SESSION["id"] = $user_ok["idusuario"]; //damos la id del user a la variable idusuario
$_SESSION["nivel"] = $user_ok["nivel"]; //damos el nivel del usuario a la variable nivel
} else {
echo 'Datos incorrectos. <br />' . $error . '';
}
}
mysql_free_result($sqllogin);
echo '<script language="JavaScript">window.location.href = "index.php";</script>';
} else {
echo 'Ha ocurrido un error mientras ingresabas, por favor inténtalo de nuevo.<br />' . $error . '';
}
mysql_close();
?>Continuación >>