Registro
Por favor necesito ponerle a una página web para registro de usuarios es decir que quiero formar un club de usuarios de mi página y que puedan accesar a ciertos links así como por ejem. La pag. Www.elforo.com.mx pero la verdad se cero de eso es más ni se que debo aprender para poder hacerlo por favor yo solo trabajo en dreamweaver y flash y no se si tenga que aprender asp y php porque ni idea tengo por favor me podrías orientar, de antemano gracias y espero respuesta
4 Respuestas
Respuesta de lumanet
1
1
lumanet, FORMACION ACADEMICA BUP y COU: (1996-2001) Ciclo Formativo de...
Se hace teniendo en una base de datos una tabla de usuarios(Podría hacerse con archivos, aunque seria un poco inseguro) y por medio de archivos PHP y manejo de sesiones(session) o por "cukis"(cookies).
Para aprender un poco sobre las cookies(algo basico) deberas de leerte primero que todo el articulo que he enviado al respecto(http://www.miscodigos.com/JLMCodigos/articulo.php?id=5), de esta manera entenderas mucho mejor el funcionamiento de este sistema, si ya lo has leido o tienes conocimiento previo sobre cookies continua leyendo.
A la hora de crear un sistema de registro de usuarios siempre pensamos en lo mismo:
registro + login + reconocimiento
Queremos que los usuarios se registren dejando sus datos y puedan acceder a algunas zonas de la página y sea reconocido por nuestra página(por ejemplo "bienvenido jlmm" o "bienvenido visitante" en caso de no estar ingresado(o registrado) en el sistema).
Muchos piensan en crear un sistema de usuarios por que les parece "bonito", pero hay pocos que realmente lo necesitan(lo digo por experiencia con dichas personas), y cuando les haces las dos preguntas:
1- ¿Qué beneficios tienen los usuarios registrados con respecto a los demás?
2- ¿Qué zonas de tu web quieres que sean de acceso restringido y PORQUE?
La mayoría no es capaz de responder la primera pregunta, y es que antes de aventurarnos a crear un sistema de usuarios para nuestra web debemos de pensar si realmente vale la pena, ya que las temáticas de la web y sus contenidos no siempre son adecuados para tener un sistema de registro de usuarios.
Para ello respondemos las 2 preguntas, en el caso de misCODIGOS.com serian:
1- ¿Qué beneficios tienen los usuarios registrados con respecto a los demás?
R://Posibilidad de enviar scripts, artículos y archivos al sistema, al igual que disponibilidad de un panel de control entre otros.
2- ¿Qué zonas de tu web quieres que sean de acceso restringido y PORQUE?
R://Quiero que solo los usuarios que estén registrados puedan enviar scripts/articulos/archivos, ya que así puedo llevar un mejor cotrol sobre los mismos y prevenir el envío indiscriminado de scripts/articulos/archivos al sistema por parte de los usuarios.
Ya tenemos nuestras razones para crear nuestro sistema de registro de usuarios, claro que pueden haber muchas razones dependiendo del tipo de web, podrían ser por ejemplo para que solo usuarios registrados puedan bajar software/musica/videos/etc, para restringir el acceso a ciertas zonas de la web "obligando" al usuario a registrarse para poder "ver" dicha zona, etc...
Siempre teniendo en cuenta que las razones sean validas y que no molesten al usuario, ya que en mi caso hace algunos meses me encontré con una web de "scripts" la cual para poder ver los "scripts" tenias que registrarte, obviamente lo que hice fue salir de esa web y olvidarla(por ello no les puedo dar la dirección), tenemos que tener muy en cuenta que zonas restringir a usuarios registrados ya que el usuario en general prefiere la comodidad y en este caso que les comento de webs con recursos y scripts para webmasters hay muchas(pero ninguna como esta :-P) y hay que buscar siempre la comodidad de los usuarios.
Ahora a lo que vinimos, crearemos nuestro sistema de registro de usuario, lo primero que debemos pensar es que datos deberá introducir el usuario para registrarse, como siempre deberán de haber aunque sea dos campos básicos:
Nick
Password
Lo más común para identificar a los usuarios es por medio de nick/password, aunque también podría ser email/password, para este articulo utilizare el primero(nick/password).
Ya sabemos que nuestra tabla de "usuarios" tendrá esos dos campos:
CREATE TABLE usuarios (
id bigint(7) NOT NULL auto_increment,
nick char(100) NOT NULL,
password char(100) NOT NULL,
KEY id (id))
¿Pero son suficientes?, también seria bueno tener el email de los usuarios en caso de querer enviar información a los usuarios registrados y tener el nombre de dichos usuarios para personalizar dichos emails o mensajes que le demos al usuario en la página(ejemplo "hola jorge luis"), entonces nuestra tabla crecería un poco:
CREATE TABLE usuarios (
id bigint(7) NOT NULL auto_increment,
nick char(100) NOT NULL,
password char(100) NOT NULL,
nombre char(255) default NULL,
email char(100) default NULL,
KEY id (id))
Listo, ya tenemos la estructura de nuestra tabla de usuarios, es pequeña y sencilla pero para efectos prácticos y de aprendizaje es perfecta(eso depende de ti, según lo que desees saber de tus usuarios).
Ahora viene lo sencillo, crear el sistema de registro de usuarios, un formulario y una aplicación que agregue al nuevo usuario a la base de datos, para ello crearemos un formulario del tipo:
<FORM ACTION="registrar.php" METHOD="post">
Nick : <INPUT TYPE="text" NAME="nick" SIZE=20 MAXLENGTH=20>
<BR>
Email: <INPUT TYPE="text" NAME="email" SIZE=28 MAXLENGTH=100>
<BR>
Password: <INPUT TYPE="password" NAME="password" SIZE=28 MAXLENGTH=20>
<BR>
Nombre: <INPUT TYPE="text" NAME="nombre" SIZE=28 MAXLENGTH=255>
<BR>
<INPUT TYPE="submit" CLASS="boton" VALUE="Registrar">
</FORM>
Y ahora necesitamos una aplicación que lo procese(registrar.php), por motivos prácticos haremos algo sencillo sin demasiadas comprobaciones(dependerá de ti mejorarlo si quieres algo más personalizado), primero el código luego la explicación:
<?php
//AQUI CONEXION O include() DE ARCHIVO DE CONEXION CON BASE DE DATOS.
function quitar($mensaje)
{
$mensaje = str_replace("<","<",$mensaje);
$mensaje = str_replace(">",">",$mensaje);
$mensaje = str_replace("\'","'",$mensaje);
$mensaje = str_replace('\"',""",$mensaje);
$mensaje = str_replace("\\\\","\",$mensaje);
return $mensaje;
}
if(trim($HTTP_POST_VARS["nick"]) != "" && trim($HTTP_POST_VARS["email"]) != "")
{
$sql = "SELECT id FROM usuarios WHERE nick='".quitar($HTTP_POST_VARS["nick"])."'";
$result = mysql_query($sql);
if($row = mysql_fetch_array($result))
{
echo "Error, nick escogido por otro usuario";
}
else
{
$sql = "INSERT INTO usuarios (nick,password,nombre,email) VALUES (";
$sql .= "'".quitar($HTTP_POST_VARS["nick"])."'";
$sql .= ",'".quitar($HTTP_POST_VARS["password"])."'";
$sql .= ",'".quitar($HTTP_POST_VARS["nombre"])."'";
$sql .= ",'".quitar($HTTP_POST_VARS["email"])."'";
$sql .= ")";
mysql_query($sql);
echo "Registro exitoso!";
}
mysql_free_result($result);
}
else
{
echo "Debe llenar como minimo los campos de email y password";
}
mysql_close();
?>
Al principio no he echo conexión con la base de datos pero he puesto el comentario "//AQUÍ CONEXIÓN O include() DE ARCHIVO DE CONEXIÓN CON BASE DE DATOS.", ya que la conexión depende de ti, si no sabes como hacer una conexión te aconsejo buscarte un manual antes de estar queriendo hacer un sistema como este.
Vemos que he declarado una función, llamada quitar($mensaje), la cual recibe el parámetro "mensaje", esta función se encargara de deshabilitar el código html("<" y ">") al reemplazarlos por su respectivo código("<" y ">"), ademas de reemplazar el apostrofe(') y las comillas dobles(") por sus respectivos códigos HTML, esto para no tener conflictos con la instrucción sql, y al final retorna la cadena con las nuevas modificaciones en caso de haberlas:
function quitar($mensaje)
{
$mensaje = str_replace("<","<",$mensaje);
$mensaje = str_replace(">",">",$mensaje);
$mensaje = str_replace("\'","'",$mensaje);
$mensaje = str_replace('\"',""",$mensaje);
$mensaje = str_replace("\\\\","\",$mensaje);
return $mensaje;
}
Ahora comprobaremos que los campos de nick y password que serán los "requeridos" como mínimo para completar el registro no estén vacíos, para ello utilizamos la función "trim()" la cual quita los espacios al comienzo y al final de la cadena, por lo que en caso de ser una cadena vacía o con solo espacios en blanco retornara "", en caso de ser válido continuamos con el registro, de lo contrario retornamos un mensaje de error:
if(trim($HTTP_POST_VARS["nick"]) != "" && trim($HTTP_POST_VARS["password"]) != "")
Ahora suponiendo que las cadenas estaban correctas comprobaremos que el nick seleccionado por el usuario no exista en la base de datos, para ello hacemos una instrucción sql para pedirle a la base de datos que nos retorne la fila donde el nick sea igual al nick introducido con el usuario(quitándole el apostrofe, html y demás con la función quitar()):
$sql = "SELECT id FROM usuarios WHERE nick='".quitar($HTTP_POST_VARS["nick"]."'";
$result = mysql_query($sql);
En caso de existir dicho nick, osea que nos devuelve una fila:
if($row = mysql_fetch_array($result))
Mostraremos un mensaje de error al usuario informándole del "incidente", de lo contrario continuaremos con el proceso de registro.
Ahora lo que hacemos es simplemente una instrucción sql donde insertamos en la tabla usuarios el nick, password, nombre y email introducidos por el usuario en el formulario, a todos estos les quitamos el html, apostrofe y demás haciendo uso de nuestra instrucción "quitar()", y mostramos un mensaje de "exito" al usuario:
$sql = "INSERT INTO usuarios (nick,password,nombre,email) VALUES (";
$sql .= "'".quitar($HTTP_POST_VARS["nick"])."'";
$sql .= ",'".quitar($HTTP_POST_VARS["password"])."'";
$sql .= ",'".quitar($HTTP_POST_VARS["nombre"])."'";
$sql .= ",'".quitar($HTTP_POST_VARS["email"])."'";
$sql .= ")";
mysql_query($sql);
echo "Registro exitoso!";
--------------------------------------------------------------------------------
Nota: Por efectos prácticos hemos echo esto muy sencillo, podrían agregar más comprobaciones como la del email o manejo de errores mysql.
También podría hacerse más seguro mediante el uso de la función de encriptación md5() para el password, aunque se esta haciendo lo más sencillo posible ya que la finalidad de este articulo es la de enseñar como reconocer a los usuarios, de ustedes dependen estos "detalles" a la hora de "depurar" este código.
--------------------------------------------------------------------------------
Bien, listo ya tenemos la aplicación de registro, ¿pero y ahora que?, que hago con todos esos usuarios, ahora necesitamos que los usuarios ingresen y sean "reconocidos" y como lo dije lo haremos por medio de cookies.
Crearemos un formulario HTML para que los usuarios introduzcan su nick y password al igual que deberemos de realizar una aplicación ingresar.php que sera la encargada de procesar si el usuario es válido y darle "ingreso" al sistema por medio de una cookie.
Es recomendable tener este archivo en la carpeta raíz de nuestra web, el formulario html seria algo así:
<FORM ACTION="ingresar.php" METHOD="post">
Nick : <INPUT TYPE="text" NAME="nick" SIZE=20 MAXLENGTH=20>
<BR>
Password: <INPUT TYPE="password" NAME="password" SIZE=28 MAXLENGTH=20>
<BR>
<INPUT TYPE="submit" CLASS="boton" VALUE="Ingresar">
</FORM>
Y ahora el codigo de nuestra aplicacion ingresar.php, luego la explicacion:
<?php
//AQUI CONEXION O include() DE ARCHIVO DE CONEXION CON BASE DE DATOS.
function quitar($mensaje)
{
$mensaje = str_replace("<","<",$mensaje);
$mensaje = str_replace(">",">",$mensaje);
$mensaje = str_replace("\'","'",$mensaje);
$mensaje = str_replace('\"',""",$mensaje);
$mensaje = str_replace("\\\\","\",$mensaje);
return $mensaje;
}
if(trim($HTTP_POST_VARS["nick"]) != "" && trim($HTTP_POST_VARS["password"]) != "")
{
$nickN = quitar($HTTP_POST_VARS["nick"]);
$passN = quitar($HTTP_POST_VARS["password"]);
$result = mysql_query("SELECT password FROM usuarios WHERE nick='$nickN'");
if($row = mysql_fetch_array($result))
{
if($row["password"] == $passN)
{
//90 dias dura la cookie
setcookie("usNick",$nickN,time()+7776000);
setcookie("usPass",$passN,time()+7776000);
?>
Ingreso exitoso, ahora sera dirigido a la pagina principal.
<SCRIPT LANGUAGE="javascript">
location.href = "index.php";
</SCRIPT>
<?
}
else
{
echo "Password incorrecto";
}
}
else
{
echo "Usuario no existente en la base de datos";
}
mysql_free_result($result);
}
else
{
echo "Debe especificar un nick y password";
}
mysql_close();
?>
Bien, arriba ya explique que debes de realizar la conexión y explique el funcionamiento de la función quitar($mensaje), así que saltemos hasta el primer "if".
Lo primero que hacemos es comprobar que los campos de "nick" y "password" para que no estén vacíos, ya sabemos para que sirve trim() así que no lo repetiré:
if(trim($HTTP_POST_VARS["nick"]) != "" && trim($HTTP_POST_VARS["password"]) != "")
Así que continuamos suponiendo que todo este bien, ahora lo que hacemos es quitarle el html, apostrofe comillas y demás al nick y password enviados por el usuario para su comprobación con la base de datos, para ello utilizamos la función quitar($mensaje) que explicamos antes, y guardamos las nuevas cadenas en dos nuevas variables:
$nickN = quitar($HTTP_POST_VARS["nick"]);
$passN = quitar($HTTP_POST_VARS["password"]);
Ahora ejecutamos una instrucción sql, en la cual le pedimos a la base de datos que de la tabla usuarios nos devuelva la fila cuyo nick corresponda por el enviado por el usuario:
$result = mysql_query("SELECT password FROM usuarios WHERE nick='$nickN'");
Si devuelve una columna quiere decir que el nick SI existe en la base de datos, de lo contrario devolvemos un mensaje de error:
if($row = mysql_fetch_array($result))
{
...
}
else
{
echo "Usuario no existente en la base de datos";
}
Ahora continuamos con el proceso suponiendo que el usuario exista en la base de datos ahora debemos comprobar que el password sea correcto, para ello hacemos una simple comparación, si es correcto continuamos de lo contrario mostramos el mensaje de password incorrecto:
if($row["password"] == $passN)
{
...
}
else
{
echo "Password incorrecto";
}
Ahora suponiendo que el password es correcto continuamos y lo próximo a hacer es establecer las cookies de nick y password(Las cuales nombramos "usNick"/"usPass" y contienen el nick y password respectivamente) en la maquina del usuario, informamos que se ha realizado correctamente el login y lo enviamos a la página principal, una vez más recalco que estamos haciendo esto lo más sencillo posible, de ti depende personalizar y mejorar los mensajes :
setcookie("usNick",$nickN,time()+7776000);
setcookie("usPass",$passN,time()+7776000);
?>
<SCRIPT LANGUAGE="javascript">
alert("Ingreso exitoso");
location.href = "index.php";
</SCRIPT>
<?
Listo, el usuario ya tiene las cookies en su sistema, ¿pero ahora que?, como hacemos para comprobar en las páginas que queramos si el login es correcto, ¿osea qué el usuario posee las cookies y son validas?.
Para ello crearemos un ultimo archivo, lo llamaremos login.php, este se encargara de leer las cookies y decirnos si el usuario es un usuario registrado y que ha echo el respectivo "ingreso" al sistema, el contenido de dicho archivo seria el siguiente:
<?php
$loginCorrecto = false;
$idUsuarioL;
$nickUsuarioL;
$emailUsuarioL;
$nombreUsuarioL;
if(isset($HTTP_COOKIE_VARS["usNick"]) && isset($HTTP_COOKIE_VARS["usPass"]))
{
$result = mysql_query("SELECT * FROM usuarios WHERE nick='".$HTTP_COOKIE_VARS["usNick"]."' AND password='".$HTTP_COOKIE_VARS["usPass"]."'");
if($row = mysql_fetch_array($result))
{
setcookie("usNick",$HTTP_COOKIE_VARS["usNick"],time()+7776000);
setcookie("usPass",$HTTP_COOKIE_VARS["usPass"],time()+7776000);
$loginCorrecto = true;
$idUsuarioL = $row["id"];
$nickUsuarioL = $row["nick"];
$emailUsuarioL = $row["email"];
$nombreUsuarioL = $row["nombre"];
}
else
{
//Destruimos las cookies.
setcookie("usNick","x",time()-3600);
setcookie("usPass","x",time()-3600);
}
mysql_free_result($result);
}
?>
Lo primero que hacemos es declarar unas variables que utilizaremos para guardar los datos del usuario en caso de tener las cookies en su sistema y de estas ser correctas:
$loginCorrecto = false;
$idUsuarioL;
$nickUsuarioL;
$emailUsuarioL;
$nombreUsuarioL;
Hay una variable boleana que tenemos que mirar de cerca y es la de $loginCorrecto ya que esta sera la que utilizaremos para comprobar el login en nuestros archivos, más adelante veremos como.
Seguidamente lo que hacemos es comprobar que las cookies existan, si no existen pues no hay problema simplemente no hay "ingreso" :
if(isset($HTTP_COOKIE_VARS["usNick"]) && isset($HTTP_COOKIE_VARS["usPass"]))
Ahora lo que hacemos es una sentencia sql, en la cual le pedimos a la base de datos que nos devuelva la fila donde el nick y password correspondan al nick y password guardado en las cookies:
$result = mysql_query("SELECT * FROM usuarios WHERE nick='".$HTTP_COOKIE_VARS["usNick"]."' AND password='".$HTTP_COOKIE_VARS["usPass"]."'");
Si ese nick y password corresponden a una fila en la base de datos esto quiere decir que son correctos de lo contrario la información de las cookies esta mal y debemos destruirlas:
if($row = mysql_fetch_array($result))
{
...
}
else
{
//Destruimos las cookies.
setcookie("usNick","x",time()-3600);
setcookie("usPass","x",time()-3600);
}
Si la información es correcta procedemos con el ingreso, establecemos de nuevo las cookies con lo que se actualiza el tiempo de destrucción a otros noventa días a partir de ahora:
setcookie("usNick",$HTTP_COOKIE_VARS["usNick"],time()+7776000);
setcookie("usPass",$HTTP_COOKIE_VARS["usPass"],time()+7776000);
Seguido de esto establecemos la variable $loginCorrecto a "true", y las otras variables las llenamos con la información del usuario:
$loginCorrecto = true;
$idUsuarioL = $row["id"];
$nickUsuarioL = $row["nick"];
$emailUsuarioL = $row["email"];
$nombreUsuarioL = $row["nombre"];
Listo ya tenemos nuestro archivo "login.php", ahora ¿cómo lo utilizamos?, bien supongamos que queremos en nuestro "index.php" darle la bienvenida al usuario en caso de estar ingresado en el sistema deseamos saludarlo por su nick o nombre en caso contrario lo saludaremos como visitante, para ello tendríamos que incluir el archivo "login.php" al comienzo de nuestro archivo "index.php" así:
--------------------------------------------------------------------------------
Nota: Antes de incluir el "login.php" debe recordar realizar la conexión con la base de datos, de lo contrario obtendrá errores.
--------------------------------------------------------------------------------
<?php
//AQUI CONEXION O include() DE ARCHIVO DE CONEXION CON BASE DE DATOS.
include("login.php");
...
Con eso el "login.php" se encargara de realizar las acciones que vimos arriba, ahora en nuestro "index.php" donde queramos saludar al visitante ponemos lo siguiente:
...
if($loginCorrecto)
{
echo "Estas identificado en el sistema como ".$nickUsuarioL;
}
else
{
echo "Bienvenido visitante, el sistema no te ha reconocido";
}
...
Como ven, hicimos uso de la variable $loginCorrecto la cual sera "true" en caso de que el usuario fuera reconocido por el sistema, de lo contrario sera "false".
Y así podemos usarlo en muchas áreas, supongamos que tenemos una sección donde solo pueden accesar los usuarios registrados, la llamaremos "restringida.php", entonces lo que haríamos para prevenir que usuarios no registrados vean el contenido seria algo así:
<?php
//AQUI CONEXION O include() DE ARCHIVO DE CONEXION CON BASE DE DATOS.
include("login.php");
if($loginCorrecto)
{
echo "Aqui el contenido solo para usuarios registrados";
}
else
{
Echo "El sistema no lo ha identificado, solo los usuarios registrados tienen acceso a esta área";
}
?>
Eso es todo, espero haya quedado claro. PD: Sobre el proceso de "logout" o "salir" no lo explico ya que es algo muy sencillo, simplemente se "borran" las cookies.
Espero haberte sido de ayuda, si tienes más dudas o para cualquier otra cosa puedes comunicármela por aquí o postearla en los foros de Lumanet.net (http://www.lumanet.net) y estaré encantado en atenderte.
Para aprender un poco sobre las cookies(algo basico) deberas de leerte primero que todo el articulo que he enviado al respecto(http://www.miscodigos.com/JLMCodigos/articulo.php?id=5), de esta manera entenderas mucho mejor el funcionamiento de este sistema, si ya lo has leido o tienes conocimiento previo sobre cookies continua leyendo.
A la hora de crear un sistema de registro de usuarios siempre pensamos en lo mismo:
registro + login + reconocimiento
Queremos que los usuarios se registren dejando sus datos y puedan acceder a algunas zonas de la página y sea reconocido por nuestra página(por ejemplo "bienvenido jlmm" o "bienvenido visitante" en caso de no estar ingresado(o registrado) en el sistema).
Muchos piensan en crear un sistema de usuarios por que les parece "bonito", pero hay pocos que realmente lo necesitan(lo digo por experiencia con dichas personas), y cuando les haces las dos preguntas:
1- ¿Qué beneficios tienen los usuarios registrados con respecto a los demás?
2- ¿Qué zonas de tu web quieres que sean de acceso restringido y PORQUE?
La mayoría no es capaz de responder la primera pregunta, y es que antes de aventurarnos a crear un sistema de usuarios para nuestra web debemos de pensar si realmente vale la pena, ya que las temáticas de la web y sus contenidos no siempre son adecuados para tener un sistema de registro de usuarios.
Para ello respondemos las 2 preguntas, en el caso de misCODIGOS.com serian:
1- ¿Qué beneficios tienen los usuarios registrados con respecto a los demás?
R://Posibilidad de enviar scripts, artículos y archivos al sistema, al igual que disponibilidad de un panel de control entre otros.
2- ¿Qué zonas de tu web quieres que sean de acceso restringido y PORQUE?
R://Quiero que solo los usuarios que estén registrados puedan enviar scripts/articulos/archivos, ya que así puedo llevar un mejor cotrol sobre los mismos y prevenir el envío indiscriminado de scripts/articulos/archivos al sistema por parte de los usuarios.
Ya tenemos nuestras razones para crear nuestro sistema de registro de usuarios, claro que pueden haber muchas razones dependiendo del tipo de web, podrían ser por ejemplo para que solo usuarios registrados puedan bajar software/musica/videos/etc, para restringir el acceso a ciertas zonas de la web "obligando" al usuario a registrarse para poder "ver" dicha zona, etc...
Siempre teniendo en cuenta que las razones sean validas y que no molesten al usuario, ya que en mi caso hace algunos meses me encontré con una web de "scripts" la cual para poder ver los "scripts" tenias que registrarte, obviamente lo que hice fue salir de esa web y olvidarla(por ello no les puedo dar la dirección), tenemos que tener muy en cuenta que zonas restringir a usuarios registrados ya que el usuario en general prefiere la comodidad y en este caso que les comento de webs con recursos y scripts para webmasters hay muchas(pero ninguna como esta :-P) y hay que buscar siempre la comodidad de los usuarios.
Ahora a lo que vinimos, crearemos nuestro sistema de registro de usuario, lo primero que debemos pensar es que datos deberá introducir el usuario para registrarse, como siempre deberán de haber aunque sea dos campos básicos:
Nick
Password
Lo más común para identificar a los usuarios es por medio de nick/password, aunque también podría ser email/password, para este articulo utilizare el primero(nick/password).
Ya sabemos que nuestra tabla de "usuarios" tendrá esos dos campos:
CREATE TABLE usuarios (
id bigint(7) NOT NULL auto_increment,
nick char(100) NOT NULL,
password char(100) NOT NULL,
KEY id (id))
¿Pero son suficientes?, también seria bueno tener el email de los usuarios en caso de querer enviar información a los usuarios registrados y tener el nombre de dichos usuarios para personalizar dichos emails o mensajes que le demos al usuario en la página(ejemplo "hola jorge luis"), entonces nuestra tabla crecería un poco:
CREATE TABLE usuarios (
id bigint(7) NOT NULL auto_increment,
nick char(100) NOT NULL,
password char(100) NOT NULL,
nombre char(255) default NULL,
email char(100) default NULL,
KEY id (id))
Listo, ya tenemos la estructura de nuestra tabla de usuarios, es pequeña y sencilla pero para efectos prácticos y de aprendizaje es perfecta(eso depende de ti, según lo que desees saber de tus usuarios).
Ahora viene lo sencillo, crear el sistema de registro de usuarios, un formulario y una aplicación que agregue al nuevo usuario a la base de datos, para ello crearemos un formulario del tipo:
<FORM ACTION="registrar.php" METHOD="post">
Nick : <INPUT TYPE="text" NAME="nick" SIZE=20 MAXLENGTH=20>
<BR>
Email: <INPUT TYPE="text" NAME="email" SIZE=28 MAXLENGTH=100>
<BR>
Password: <INPUT TYPE="password" NAME="password" SIZE=28 MAXLENGTH=20>
<BR>
Nombre: <INPUT TYPE="text" NAME="nombre" SIZE=28 MAXLENGTH=255>
<BR>
<INPUT TYPE="submit" CLASS="boton" VALUE="Registrar">
</FORM>
Y ahora necesitamos una aplicación que lo procese(registrar.php), por motivos prácticos haremos algo sencillo sin demasiadas comprobaciones(dependerá de ti mejorarlo si quieres algo más personalizado), primero el código luego la explicación:
<?php
//AQUI CONEXION O include() DE ARCHIVO DE CONEXION CON BASE DE DATOS.
function quitar($mensaje)
{
$mensaje = str_replace("<","<",$mensaje);
$mensaje = str_replace(">",">",$mensaje);
$mensaje = str_replace("\'","'",$mensaje);
$mensaje = str_replace('\"',""",$mensaje);
$mensaje = str_replace("\\\\","\",$mensaje);
return $mensaje;
}
if(trim($HTTP_POST_VARS["nick"]) != "" && trim($HTTP_POST_VARS["email"]) != "")
{
$sql = "SELECT id FROM usuarios WHERE nick='".quitar($HTTP_POST_VARS["nick"])."'";
$result = mysql_query($sql);
if($row = mysql_fetch_array($result))
{
echo "Error, nick escogido por otro usuario";
}
else
{
$sql = "INSERT INTO usuarios (nick,password,nombre,email) VALUES (";
$sql .= "'".quitar($HTTP_POST_VARS["nick"])."'";
$sql .= ",'".quitar($HTTP_POST_VARS["password"])."'";
$sql .= ",'".quitar($HTTP_POST_VARS["nombre"])."'";
$sql .= ",'".quitar($HTTP_POST_VARS["email"])."'";
$sql .= ")";
mysql_query($sql);
echo "Registro exitoso!";
}
mysql_free_result($result);
}
else
{
echo "Debe llenar como minimo los campos de email y password";
}
mysql_close();
?>
Al principio no he echo conexión con la base de datos pero he puesto el comentario "//AQUÍ CONEXIÓN O include() DE ARCHIVO DE CONEXIÓN CON BASE DE DATOS.", ya que la conexión depende de ti, si no sabes como hacer una conexión te aconsejo buscarte un manual antes de estar queriendo hacer un sistema como este.
Vemos que he declarado una función, llamada quitar($mensaje), la cual recibe el parámetro "mensaje", esta función se encargara de deshabilitar el código html("<" y ">") al reemplazarlos por su respectivo código("<" y ">"), ademas de reemplazar el apostrofe(') y las comillas dobles(") por sus respectivos códigos HTML, esto para no tener conflictos con la instrucción sql, y al final retorna la cadena con las nuevas modificaciones en caso de haberlas:
function quitar($mensaje)
{
$mensaje = str_replace("<","<",$mensaje);
$mensaje = str_replace(">",">",$mensaje);
$mensaje = str_replace("\'","'",$mensaje);
$mensaje = str_replace('\"',""",$mensaje);
$mensaje = str_replace("\\\\","\",$mensaje);
return $mensaje;
}
Ahora comprobaremos que los campos de nick y password que serán los "requeridos" como mínimo para completar el registro no estén vacíos, para ello utilizamos la función "trim()" la cual quita los espacios al comienzo y al final de la cadena, por lo que en caso de ser una cadena vacía o con solo espacios en blanco retornara "", en caso de ser válido continuamos con el registro, de lo contrario retornamos un mensaje de error:
if(trim($HTTP_POST_VARS["nick"]) != "" && trim($HTTP_POST_VARS["password"]) != "")
Ahora suponiendo que las cadenas estaban correctas comprobaremos que el nick seleccionado por el usuario no exista en la base de datos, para ello hacemos una instrucción sql para pedirle a la base de datos que nos retorne la fila donde el nick sea igual al nick introducido con el usuario(quitándole el apostrofe, html y demás con la función quitar()):
$sql = "SELECT id FROM usuarios WHERE nick='".quitar($HTTP_POST_VARS["nick"]."'";
$result = mysql_query($sql);
En caso de existir dicho nick, osea que nos devuelve una fila:
if($row = mysql_fetch_array($result))
Mostraremos un mensaje de error al usuario informándole del "incidente", de lo contrario continuaremos con el proceso de registro.
Ahora lo que hacemos es simplemente una instrucción sql donde insertamos en la tabla usuarios el nick, password, nombre y email introducidos por el usuario en el formulario, a todos estos les quitamos el html, apostrofe y demás haciendo uso de nuestra instrucción "quitar()", y mostramos un mensaje de "exito" al usuario:
$sql = "INSERT INTO usuarios (nick,password,nombre,email) VALUES (";
$sql .= "'".quitar($HTTP_POST_VARS["nick"])."'";
$sql .= ",'".quitar($HTTP_POST_VARS["password"])."'";
$sql .= ",'".quitar($HTTP_POST_VARS["nombre"])."'";
$sql .= ",'".quitar($HTTP_POST_VARS["email"])."'";
$sql .= ")";
mysql_query($sql);
echo "Registro exitoso!";
--------------------------------------------------------------------------------
Nota: Por efectos prácticos hemos echo esto muy sencillo, podrían agregar más comprobaciones como la del email o manejo de errores mysql.
También podría hacerse más seguro mediante el uso de la función de encriptación md5() para el password, aunque se esta haciendo lo más sencillo posible ya que la finalidad de este articulo es la de enseñar como reconocer a los usuarios, de ustedes dependen estos "detalles" a la hora de "depurar" este código.
--------------------------------------------------------------------------------
Bien, listo ya tenemos la aplicación de registro, ¿pero y ahora que?, que hago con todos esos usuarios, ahora necesitamos que los usuarios ingresen y sean "reconocidos" y como lo dije lo haremos por medio de cookies.
Crearemos un formulario HTML para que los usuarios introduzcan su nick y password al igual que deberemos de realizar una aplicación ingresar.php que sera la encargada de procesar si el usuario es válido y darle "ingreso" al sistema por medio de una cookie.
Es recomendable tener este archivo en la carpeta raíz de nuestra web, el formulario html seria algo así:
<FORM ACTION="ingresar.php" METHOD="post">
Nick : <INPUT TYPE="text" NAME="nick" SIZE=20 MAXLENGTH=20>
<BR>
Password: <INPUT TYPE="password" NAME="password" SIZE=28 MAXLENGTH=20>
<BR>
<INPUT TYPE="submit" CLASS="boton" VALUE="Ingresar">
</FORM>
Y ahora el codigo de nuestra aplicacion ingresar.php, luego la explicacion:
<?php
//AQUI CONEXION O include() DE ARCHIVO DE CONEXION CON BASE DE DATOS.
function quitar($mensaje)
{
$mensaje = str_replace("<","<",$mensaje);
$mensaje = str_replace(">",">",$mensaje);
$mensaje = str_replace("\'","'",$mensaje);
$mensaje = str_replace('\"',""",$mensaje);
$mensaje = str_replace("\\\\","\",$mensaje);
return $mensaje;
}
if(trim($HTTP_POST_VARS["nick"]) != "" && trim($HTTP_POST_VARS["password"]) != "")
{
$nickN = quitar($HTTP_POST_VARS["nick"]);
$passN = quitar($HTTP_POST_VARS["password"]);
$result = mysql_query("SELECT password FROM usuarios WHERE nick='$nickN'");
if($row = mysql_fetch_array($result))
{
if($row["password"] == $passN)
{
//90 dias dura la cookie
setcookie("usNick",$nickN,time()+7776000);
setcookie("usPass",$passN,time()+7776000);
?>
Ingreso exitoso, ahora sera dirigido a la pagina principal.
<SCRIPT LANGUAGE="javascript">
location.href = "index.php";
</SCRIPT>
<?
}
else
{
echo "Password incorrecto";
}
}
else
{
echo "Usuario no existente en la base de datos";
}
mysql_free_result($result);
}
else
{
echo "Debe especificar un nick y password";
}
mysql_close();
?>
Bien, arriba ya explique que debes de realizar la conexión y explique el funcionamiento de la función quitar($mensaje), así que saltemos hasta el primer "if".
Lo primero que hacemos es comprobar que los campos de "nick" y "password" para que no estén vacíos, ya sabemos para que sirve trim() así que no lo repetiré:
if(trim($HTTP_POST_VARS["nick"]) != "" && trim($HTTP_POST_VARS["password"]) != "")
Así que continuamos suponiendo que todo este bien, ahora lo que hacemos es quitarle el html, apostrofe comillas y demás al nick y password enviados por el usuario para su comprobación con la base de datos, para ello utilizamos la función quitar($mensaje) que explicamos antes, y guardamos las nuevas cadenas en dos nuevas variables:
$nickN = quitar($HTTP_POST_VARS["nick"]);
$passN = quitar($HTTP_POST_VARS["password"]);
Ahora ejecutamos una instrucción sql, en la cual le pedimos a la base de datos que de la tabla usuarios nos devuelva la fila cuyo nick corresponda por el enviado por el usuario:
$result = mysql_query("SELECT password FROM usuarios WHERE nick='$nickN'");
Si devuelve una columna quiere decir que el nick SI existe en la base de datos, de lo contrario devolvemos un mensaje de error:
if($row = mysql_fetch_array($result))
{
...
}
else
{
echo "Usuario no existente en la base de datos";
}
Ahora continuamos con el proceso suponiendo que el usuario exista en la base de datos ahora debemos comprobar que el password sea correcto, para ello hacemos una simple comparación, si es correcto continuamos de lo contrario mostramos el mensaje de password incorrecto:
if($row["password"] == $passN)
{
...
}
else
{
echo "Password incorrecto";
}
Ahora suponiendo que el password es correcto continuamos y lo próximo a hacer es establecer las cookies de nick y password(Las cuales nombramos "usNick"/"usPass" y contienen el nick y password respectivamente) en la maquina del usuario, informamos que se ha realizado correctamente el login y lo enviamos a la página principal, una vez más recalco que estamos haciendo esto lo más sencillo posible, de ti depende personalizar y mejorar los mensajes :
setcookie("usNick",$nickN,time()+7776000);
setcookie("usPass",$passN,time()+7776000);
?>
<SCRIPT LANGUAGE="javascript">
alert("Ingreso exitoso");
location.href = "index.php";
</SCRIPT>
<?
Listo, el usuario ya tiene las cookies en su sistema, ¿pero ahora que?, como hacemos para comprobar en las páginas que queramos si el login es correcto, ¿osea qué el usuario posee las cookies y son validas?.
Para ello crearemos un ultimo archivo, lo llamaremos login.php, este se encargara de leer las cookies y decirnos si el usuario es un usuario registrado y que ha echo el respectivo "ingreso" al sistema, el contenido de dicho archivo seria el siguiente:
<?php
$loginCorrecto = false;
$idUsuarioL;
$nickUsuarioL;
$emailUsuarioL;
$nombreUsuarioL;
if(isset($HTTP_COOKIE_VARS["usNick"]) && isset($HTTP_COOKIE_VARS["usPass"]))
{
$result = mysql_query("SELECT * FROM usuarios WHERE nick='".$HTTP_COOKIE_VARS["usNick"]."' AND password='".$HTTP_COOKIE_VARS["usPass"]."'");
if($row = mysql_fetch_array($result))
{
setcookie("usNick",$HTTP_COOKIE_VARS["usNick"],time()+7776000);
setcookie("usPass",$HTTP_COOKIE_VARS["usPass"],time()+7776000);
$loginCorrecto = true;
$idUsuarioL = $row["id"];
$nickUsuarioL = $row["nick"];
$emailUsuarioL = $row["email"];
$nombreUsuarioL = $row["nombre"];
}
else
{
//Destruimos las cookies.
setcookie("usNick","x",time()-3600);
setcookie("usPass","x",time()-3600);
}
mysql_free_result($result);
}
?>
Lo primero que hacemos es declarar unas variables que utilizaremos para guardar los datos del usuario en caso de tener las cookies en su sistema y de estas ser correctas:
$loginCorrecto = false;
$idUsuarioL;
$nickUsuarioL;
$emailUsuarioL;
$nombreUsuarioL;
Hay una variable boleana que tenemos que mirar de cerca y es la de $loginCorrecto ya que esta sera la que utilizaremos para comprobar el login en nuestros archivos, más adelante veremos como.
Seguidamente lo que hacemos es comprobar que las cookies existan, si no existen pues no hay problema simplemente no hay "ingreso" :
if(isset($HTTP_COOKIE_VARS["usNick"]) && isset($HTTP_COOKIE_VARS["usPass"]))
Ahora lo que hacemos es una sentencia sql, en la cual le pedimos a la base de datos que nos devuelva la fila donde el nick y password correspondan al nick y password guardado en las cookies:
$result = mysql_query("SELECT * FROM usuarios WHERE nick='".$HTTP_COOKIE_VARS["usNick"]."' AND password='".$HTTP_COOKIE_VARS["usPass"]."'");
Si ese nick y password corresponden a una fila en la base de datos esto quiere decir que son correctos de lo contrario la información de las cookies esta mal y debemos destruirlas:
if($row = mysql_fetch_array($result))
{
...
}
else
{
//Destruimos las cookies.
setcookie("usNick","x",time()-3600);
setcookie("usPass","x",time()-3600);
}
Si la información es correcta procedemos con el ingreso, establecemos de nuevo las cookies con lo que se actualiza el tiempo de destrucción a otros noventa días a partir de ahora:
setcookie("usNick",$HTTP_COOKIE_VARS["usNick"],time()+7776000);
setcookie("usPass",$HTTP_COOKIE_VARS["usPass"],time()+7776000);
Seguido de esto establecemos la variable $loginCorrecto a "true", y las otras variables las llenamos con la información del usuario:
$loginCorrecto = true;
$idUsuarioL = $row["id"];
$nickUsuarioL = $row["nick"];
$emailUsuarioL = $row["email"];
$nombreUsuarioL = $row["nombre"];
Listo ya tenemos nuestro archivo "login.php", ahora ¿cómo lo utilizamos?, bien supongamos que queremos en nuestro "index.php" darle la bienvenida al usuario en caso de estar ingresado en el sistema deseamos saludarlo por su nick o nombre en caso contrario lo saludaremos como visitante, para ello tendríamos que incluir el archivo "login.php" al comienzo de nuestro archivo "index.php" así:
--------------------------------------------------------------------------------
Nota: Antes de incluir el "login.php" debe recordar realizar la conexión con la base de datos, de lo contrario obtendrá errores.
--------------------------------------------------------------------------------
<?php
//AQUI CONEXION O include() DE ARCHIVO DE CONEXION CON BASE DE DATOS.
include("login.php");
...
Con eso el "login.php" se encargara de realizar las acciones que vimos arriba, ahora en nuestro "index.php" donde queramos saludar al visitante ponemos lo siguiente:
...
if($loginCorrecto)
{
echo "Estas identificado en el sistema como ".$nickUsuarioL;
}
else
{
echo "Bienvenido visitante, el sistema no te ha reconocido";
}
...
Como ven, hicimos uso de la variable $loginCorrecto la cual sera "true" en caso de que el usuario fuera reconocido por el sistema, de lo contrario sera "false".
Y así podemos usarlo en muchas áreas, supongamos que tenemos una sección donde solo pueden accesar los usuarios registrados, la llamaremos "restringida.php", entonces lo que haríamos para prevenir que usuarios no registrados vean el contenido seria algo así:
<?php
//AQUI CONEXION O include() DE ARCHIVO DE CONEXION CON BASE DE DATOS.
include("login.php");
if($loginCorrecto)
{
echo "Aqui el contenido solo para usuarios registrados";
}
else
{
Echo "El sistema no lo ha identificado, solo los usuarios registrados tienen acceso a esta área";
}
?>
Eso es todo, espero haya quedado claro. PD: Sobre el proceso de "logout" o "salir" no lo explico ya que es algo muy sencillo, simplemente se "borran" las cookies.
Espero haberte sido de ayuda, si tienes más dudas o para cualquier otra cosa puedes comunicármela por aquí o postearla en los foros de Lumanet.net (http://www.lumanet.net) y estaré encantado en atenderte.
- Compartir respuesta
- Anónimo
ahora mismo
Respuesta de lukaswebs
1
1
lukaswebs, - Fluidez en el manejo de HTML
Para hacer este tipo de sistemas debes saber PHP... y a decir verdad no es nada fácil para alguien que recién se inicie. Le veo dos soluciones a tu pregunta:
1) Pnte a estudiar PHP y dentro de un par de meses quizás puedas hacerlo vos mismo (poco recomendable)
2) Metete en http://www.hotscripts.com/PHP/Scripts_and_Programs/User_Authentication/index.html
Allí hay sistemas de autentificación de usuarios ya creados que te podrás bajar y utilizar gratuitamente en tu sitio.
Yo si fuera vos dejaría la web tal cual está, vuelvo a repetirte que esto no es muy sencillo.
1) Pnte a estudiar PHP y dentro de un par de meses quizás puedas hacerlo vos mismo (poco recomendable)
2) Metete en http://www.hotscripts.com/PHP/Scripts_and_Programs/User_Authentication/index.html
Allí hay sistemas de autentificación de usuarios ya creados que te podrás bajar y utilizar gratuitamente en tu sitio.
Yo si fuera vos dejaría la web tal cual está, vuelvo a repetirte que esto no es muy sencillo.
- Compartir respuesta
- Anónimo
ahora mismo
Respuesta de kunndry
1
1
Para hacer lo que quieres supongo que se puede hacer con muchas tecnologías distintas.
Desde JavaScript, el más sencillo pero menos seguro, hasta ASP, PHP...
Con ASP(Y php, puesto que son lo mismo pero con distinta sintaxis), lo puedes hacer con bases de datos, si conoces algo ya del lenguaje no es muy complicado, de todas formas imagino que habrá ya por ahí trozos de código para cortar y pegar de una manera más o menos sencilla.
Con la base de datos, lo que necesitaras es una tabla con nombre de usuario y contraseña, y simplemente al intentar entrar que mire haber si existe ese usuario y esa contraseña, si existe le insertas una cookie (o variable session de asp) y si no, no se la introduces. Entonces luego para que entre en las páginas que requieren registro compruebas si esta la cookie, y le dejas entrar o no.
Espero no haberme enrollado demasiado, y que te haya servido de algo.
Si no te aclaras y quieres contratar que te lo haga alguien, puedes decirme exactamente lo que necesitas y te doy un presupuesto.
Desde JavaScript, el más sencillo pero menos seguro, hasta ASP, PHP...
Con ASP(Y php, puesto que son lo mismo pero con distinta sintaxis), lo puedes hacer con bases de datos, si conoces algo ya del lenguaje no es muy complicado, de todas formas imagino que habrá ya por ahí trozos de código para cortar y pegar de una manera más o menos sencilla.
Con la base de datos, lo que necesitaras es una tabla con nombre de usuario y contraseña, y simplemente al intentar entrar que mire haber si existe ese usuario y esa contraseña, si existe le insertas una cookie (o variable session de asp) y si no, no se la introduces. Entonces luego para que entre en las páginas que requieren registro compruebas si esta la cookie, y le dejas entrar o no.
Espero no haberme enrollado demasiado, y que te haya servido de algo.
Si no te aclaras y quieres contratar que te lo haga alguien, puedes decirme exactamente lo que necesitas y te doy un presupuesto.
- Compartir respuesta
- Anónimo
ahora mismo
Respuesta de virmix
1
1
- Compartir respuesta
- Anónimo
ahora mismo