bueno para eso que pides hay dos opciones, la primera es un sistema que restringa el acceso a una pagina, tu administrarias la lista de miembros, no se puede hacer con .txt solo con MySQL pero es bastante sensillo, veamos:
Primero creamos la tabla MySQL despues vamos a crear las tablas que contendran los valores:
# Estructura SQL de la tabla Usuarios
#
# Estructura de tabla para tabla `usuarios`
#
CREATE TABLE usuarios (
ID smallint(6) unsigned NOT NULL auto_increment,
usuario tinytext NOT NULL,
pass tinytext NOT NULL,
nivel_acceso smallint(4) unsigned NOT NULL default '0',
PRIMARY KEY (ID),
UNIQUE KEY ID (ID)
) TYPE=MyISAM PACK_KEYS=1;
#
# Volcar la base de datos para la tabla `usuarios`
#
INSERT INTO usuarios VALUES (1, 'Admin', '21232f297a57a5a743894a0e4a801fc3', 0);
Bueno esto creara la tabla usuarios y un usuario por defecto o administrador en este caso
Admin es el nombre de usuario
Admin es la contraseña (no se lee pues esta encripatada)
Luego de eso necesitamos un archivo que nos conecte a la base de datos este se llamara
aut_config.inc.php
<?
// Configuración
// Nombre de la session (puedes dejar este mismo)
$usuarios_sesion="autentificator";
// Datos conexión a la Base de datos (MySql)
$sql_host="tu host"; // Host, nombre del servidor o IP del servidor Mysql.
$sql_usuario="Usuario"; // Usuario de Mysql
$sql_pass="Usuario"; // contraseña de Mysql
$sql_db="Usuario"; // Base de datos que se usará.
$sql_tabla="usuarios"; // Nombre de la tabla que contendrá los datos de los usuarios (esta es la que ya creamos)
?>
Ahora debemos hacer un archivo que verifique al usuario y los datos que ingresa para saber que existe en la Base de Datos
aut_verifica.inc.php
<?
// Autentificator
// Cargar datos conexion y otras variables.
require ("aut_config.inc.php");
// chequear página que lo llama para devolver errores a dicha página.
$url = explode("?",$_SERVER['HTTP_REFERER']);
$pag_referida=$url[0];
$redir=$pag_referida;
// chequear si se llama directo al script.
if ($_SERVER['HTTP_REFERER'] == ""){
die ("Error cod.:1 - Acceso incorrecto!");
exit;
}
// Chequeamos si se está autentificandose un usuario por medio del formulario
if (isset($_POST['user']) && isset($_POST['pass'])) {
// Conexión base de datos.
// si no se puede conectar a la BD salimos del scrip con error 0 y
// redireccionamos a la pagina de error.
$db_conexion= mysql_connect("$sql_host", "$sql_usuario", "$sql_pass") or die(header ("Location: $redir?error_login=0"));
mysql_select_db("$sql_db");
// realizamos la consulta a la BD para chequear datos del Usuario.
$usuario_consulta = mysql_query("SELECT ID,usuario,pass,nivel_acceso FROM $sql_tabla WHERE usuario='".$_POST['user']."'") or die(header ("Location: $redir?error_login=1"));
// miramos el total de resultado de la consulta (si es distinto de 0 es que existe el usuario)
if (mysql_num_rows($usuario_consulta) != 0) {
// eliminamos barras invertidas y dobles en sencillas
$login = stripslashes($_POST['user']);
// encriptamos el password en formato md5 irreversible.
$password = md5($_POST['pass']);
// almacenamos datos del Usuario en un array para empezar a chequear.
$usuario_datos = mysql_fetch_array($usuario_consulta);
// liberamos la memoria usada por la consulta, ya que tenemos estos datos en el Array.
mysql_free_result($usuario_consulta);
// cerramos la Base de dtos.
mysql_close($db_conexion);
// chequeamos el nombre del usuario otra vez contrastandolo con la BD
// esta vez sin barras invertidas, etc ...
// si no es correcto, salimos del script con error 4 y redireccionamos a la
// página de error.
if ($login != $usuario_datos['usuario']) {
Header ("Location: $redir?error_login=4");
exit;}
// si el password no es correcto ..
// salimos del script con error 3 y redireccinamos hacia la página de error
if ($password != $usuario_datos['pass']) {
Header ("Location: $redir?error_login=3");
exit;}
// Paranoia: destruimos las variables login y password usadas
unset($login);
unset ($password);
// En este punto, el usuario ya esta validado.
// Grabamos los datos del usuario en una sesion.
// le damos un mobre a la sesion.
session_name($usuarios_sesion);
// incia sessiones
session_start();
// Paranoia: decimos al navegador que no "cachee" esta página.
session_cache_limiter('nocache,private');
// Asignamos variables de sesión con datos del Usuario para el uso en el
// resto de páginas autentificadas.
// definimos usuarios_id como IDentificador del usuario en nuestra BD de usuarios
$_SESSION['usuario_id']=$usuario_datos['ID'];
// definimos usuario_nivel con el Nivel de acceso del usuario de nuestra BD de usuarios
$_SESSION['usuario_nivel']=$usuario_datos['nivel_acceso'];
//definimos usuario_nivel con el Nivel de acceso del usuario de nuestra BD de usuarios
$_SESSION['usuario_login']=$usuario_datos['usuario'];
//definimos usuario_password con el password del usuario de la sesión actual (formato md5 encriptado)
$_SESSION['usuario_password']=$usuario_datos['pass'];
// Hacemos una llamada a si mismo (scritp) para que queden disponibles
// las variables de session en el array asociado $HTTP_...
$pag=$_SERVER['PHP_SELF'];
Header ("Location: $pag?");
exit;
} else {
// si no esta el nombre de usuario en la BD o el password ..
// se devuelve a pagina q lo llamo con error
Header ("Location: $redir?error_login=2");
exit;}
} else {
// -------- Chequear sesión existe -------
// usamos la sesion de nombre definido.
session_name($usuarios_sesion);
// Iniciamos el uso de sesiones
session_start();
// Chequeamos si estan creadas las variables de sesión de identificación del usuario,
// El caso mas comun es el de una vez "matado" la sesion se intenta volver hacia atras
// con el navegador.
if (!isset($_SESSION['usuario_login']) && !isset($_SESSION['usuario_password'])){
// Borramos la sesion creada por el inicio de session anterior
session_destroy();
die ("Error cod.: 2 - Acceso incorrecto!");
exit;
}
}
?>
:shock: :shock: :shock:
Ya con estos dos archivos ahora hay que crear un formulario que nos permita logearnos en las paginas que usaran la funcion require() pueden cambiar el nombre de los campos este es un ejemplo
formulario.php
<form action="pagina_que_requiera_autentificacion.php" method="post">
Usuario: <input type="text" name="user">
Passwor: <input type="password" name="pass">
</form>
Tambien debemos incluir aqui mismo el codigo que nos dara los mensajes de error
<?PHP
// Mostrar error de Autentificación.
include ("aut_mensaje_error.inc.php");
if (isset($_GET['error_login'])){
$error=$_GET['error_login'];
echo "Error: $error_login_ms[$error]";
}
?>
con esto ya has elaborado la estructura para los usuarios, pero falta algo, la del administrador, osea tu
para que puedas agregar a mas usuarios vamos a crear un archivo que se llame este sera solo el formulario para entrar a la zona de administracion
gestion_usuarios.php
<table width="250" border="1" cellspacing="0" cellpadding="0" align="center">
<tr>
<td>
<table width=100% border=0 align="center" cellpadding="0" cellspacing="0" bordercolor="#009999">
<form action="aut_gestion_usuarios.php" method="post">
<tr bgcolor="#0099FF">
<td height="45" colspan="2" bgcolor="#FFFFFF">
<div align="center"><font face="Arial" color="#FFFFFF" size=2>[b]<font color="#000000">Identificación
Usuarios</font>
[/b]</font></div>
</td>
</tr>
<tr>
<td colspan="2">
<div align="center">
<table width="100%" border="0" cellspacing="0" cellpadding="5">
<tr valign="middle">
<td colspan="2" height="30">
<div align="center">
<?
// Mostrar error de Autentificación.
include ("aut_mensaje_error.inc.php");
if (isset($_GET['error_login'])){
$error=$_GET['error_login'];
echo "<font face='Verdana, Arial, Helvetica, sans-serif' size='1' color='#FF0000'>Error: $error_login_ms[$error]";
}
?>
</div>
</td>
</tr>
<tr>
<td width="39%">
<div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Usuario
: </font></div>
</td>
<td width="61%">
<div align="left">
<input type="text" name="user" size="15" class="imputbox">
</div>
</td>
</tr>
<tr>
<td width="39%">
<div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Password
: </font></div>
</td>
<td width="61%">
<div align="left">
<input type="password" name="pass" size="15" class="imputbox">
</div>
</td>
</tr>
</table>
</div>
</td>
</tr>
<tr valign="middle">
<td colspan="2" height="50">
<div align="center"><font face="Arial" color=black size=2>
<input name=submit type=submit value=" Entrar " class="botones">
</font></div>
</td>
</tr>
</form>
</table>
</td>
</tr>
</table>
:wink: :wink:
Ahora si, esta es la pagina que se conectara con la Base de datos, es un poco larga asi que no la explicare mucho, pueden cambiarle los colores si quieren que asi la tenia para un experimento los comentarios explican para que es cada cosa
aut_gestion_usuarios.php
<?
// Autentificator
require("aut_verifica.inc.php"); // incluir motor de autentificación.
$nivel_acceso=0; // definir nivel de acceso para esta página.
if ($nivel_acceso < $_SESSION['usuario_nivel']){
header ("Location: $redir?error_login=5");
exit;
}
require ("aut_config.inc.php"); // incluir configuracion.
$pag=$_SERVER['PHP_SELF']; // el nombre y ruta de esta misma página.
function cabeceraHTML(){
echo <<< HTML
<html>
<head>
<title>Gestión Usuarios - www.tusitio.tal</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
.botones { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 9pt; color: #FFFFFF; background-color: #0099FF; border-color: #000000 ; border-top-width: 1pix; border-right-width: 1pix; border-bottom-width: 1pix; border-left-width: 1pix}
.imputbox { font-size: 10pt; color: #000099; background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; border: 1pix #000000 solid; border-color: #000000 solid; font-weight: normal}
A:VISITED { font-weight: normal; color: #0000CC; TEXT-DECORATION:none; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt}
A:LINK { font-weight: normal; color: #0000CC; TEXT-DECORATION:none; font-family: Verdana, Arial, Helvetica, sans-serif; border-color: #33FF33 #66FF66; clip: rect( ); font-size: 10pt}
A:ACTIVE { font-weight: normal; color: #FF3333; TEXT-DECORATION:none; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt}
A:HOVER { font-weight: normal; color: #0000CC; font-family: Verdana, Arial, Helvetica, sans-serif; font-weight: normal; text-decoration: underline; font-size: 10pt}
-->
</style>
</head>
<body bgcolor="#FFFFFF">
HTML;
}
if (isset($_GET['error'])){
$error_accion_ms[0]= "No se puede borrar el Usuario, debe existir por lo menos uno.
Si desea borrarlo, primero cree uno nuevo.";
$error_accion_ms[1]= "Faltan Datos.";
$error_accion_ms[2]= "Passwords no coinciden.";
$error_accion_ms[3]= "El Nivel de Acceso ha de ser numérico.";
$error_accion_ms[4]= "El Usuario ya está registrado.";
$error_cod = $_GET['error'];
echo "<div align='center'>$error_accion_ms[$error_cod]</div>
";
}
$db_conexion= mysql_connect("$sql_host", "$sql_usuario", "$sql_pass") or die("No se pudo conectar a la Base de datos") or die(mysql_error());
mysql_select_db("$sql_db") or die(mysql_error());
if (!isset($_GET['accion'])){
$usuario_consulta = mysql_query("SELECT ID,usuario,nivel_acceso FROM $sql_tabla") or die("No se pudo realizar la consulta a la Base de datos");
cabeceraHTML();
echo <<< HTML
<table width="500" border="1" cellspacing="0" cellpadding="4" bordercolor="#CCCCCC" align="center">
<tr>
<td colspan="4" bgcolor="#0099FF">
<div align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">[b]<font color="#FFFFFF">.:
Gestión Usuarios :.</font>[/b]</font>
[url="aut_logout.php"]LogOut (salir)[/url]
</div>
</td>
</tr>
<tr bgcolor="#00CCCC">
<td width="14%">
<div align="center">[b]<font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#FFFFFF">ID
</font>[/b]</div>
</td>
<td width="30%">
<div align="center">[b]<font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#FFFFFF">Usuario
</font>[/b]</div>
</td>
<td width="24%">
<div align="center">[b]<font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#FFFFFF">Nivel
</font>[/b]</div>
</td>
<td width="32%" bgcolor="#CCFFCC">
<div align="center"><font color="#FFFFFF">[url="$pag?accion=nuevo"]Registrar usuario[/url]</font></div></td>
</tr>
HTML;
while($resultados = mysql_fetch_array($usuario_consulta)) {
echo <<< HTML
<tr>
<td width="14%" bgcolor="#FFFFEA"><div align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#000000">$resultados[ID]</font></div></td>
<td width="30%" bgcolor="#FFFFEA"><div align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#000000">$resultados[usuario]</font></div></td>
<td width="24%" bgcolor="#FFFFEA"><div align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#000000">$resultados[nivel_acceso]</font></div></td>
<td width="32%" bgcolor="#CCFFCC">
<div align="center">[url="$pag?accion=borrar&id=$resultados[ID]"]<font face="Verdana, Arial, Helvetica, sans-serif" size="2">Borrar</font>[/url]<font face="Verdana, Arial, Helvetica, sans-serif" size="2">
| [url="$pag?accion=nivel&id=$resultados[ID]"]Nivel acceso[/url]</font></div>
</td>
</tr>
HTML;
}
echo "</table>";
mysql_free_result($usuario_consulta);
mysql_close();
}
if (isset($_GET['id'])){
if ($_GET['accion']=="borrar"){
$usuarios_consulta = mysql_query("SELECT ID FROM $sql_tabla") or die(mysql_error());
$total_registros = mysql_num_rows ($usuarios_consulta);
mysql_free_result($usuarios_consulta);
if ($total_registros == 1){
header ("Location: $pag?error=0");
exit;
}
$id_borrar= $_GET['id'];
mysql_query("DELETE FROM $sql_tabla WHERE id=$id_borrar") or die(mysql_error());
mysql_close();
header ("Location: $pag");
exit;
}
if ($_GET['accion']=="nivel"){
cabeceraHTML();
$id_mod_nivel= $_GET['id'];
$usuario_consulta = mysql_query("SELECT ID,usuario,nivel_acceso FROM $sql_tabla WHERE id=$id_mod_nivel") or die("No se pudo realizar la consulta a la Base de datos");
while($resultados = mysql_fetch_array($usuario_consulta)) {
echo <<< HTML
<form method="post" action="$pag?accion=editarnivel">
<input type="hidden" name="id" value="$resultados[ID]">
<table width="399" border="1" cellspacing="0" cellpadding="4" align="center">
<tr>
<td colspan="2" height="30" bgcolor="#0099FF">
<div align="center">[b]<font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#FFFFFF">.:
Modificar Nivel Acceso Usuario :.</font>[/b]</div>
</td>
</tr>
<tr bgcolor="#FFFFCC">
<td width="185">
<div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Usuario
: </font></div>
</td>
<td width="192">[b]<font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#0000CC">$resultados[usuario]</font>
</font>[/b]</td>
</tr>
<tr bgcolor="#FFFFCC">
<td width="185"><div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Nivel
Acceso actual : </font></div></td>
<td width="192">[b]<font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#0000CC">$resultados[nivel_acceso]</font>
</font>[/b]</td>
</tr>
<tr bgcolor="#FFFFCC">
<td width="185">
<div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Nuevo
Nivel de Acceso : </font></div>
</td>
<td width="192">[b]<font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<input type="text" name="nuevonivelacceso" class="imputbox" size="4" maxlength="4">
</font>[/b]</td>
</tr>
<tr bgcolor="#FFFFCC">
<td colspan="2" height="40">
<div align="center">
<input type="submit" name="Submit" value=" Actualizar " class="botones" >
</div>
</td>
</tr>
</table>
</form>
HTML;
}
mysql_free_result($usuario_consulta);
mysql_close();
}
}
if ($_GET['accion']=="editarnivel"){
$id=$_POST['id'];
$nivelnuevo=$_POST['nuevonivelacceso'];
if ($nivelnuevo==""){
header ("Location: $pag?accion=nivel&id=$id&error=1");
exit;
}
mysql_query("UPDATE $sql_tabla SET nivel_acceso='$nivelnuevo' WHERE ID=$id") or die(mysql_error());
mysql_close ();
header ("Location: $pag");
exit;
}
if ($_GET['accion']=="nuevo"){
cabeceraHTML();
echo <<< HTML
<form method="post" action="$PHP_SELF?accion=hacernuevo">
<table width="350" border="1" cellspacing="0" cellpadding="4" align="center">
<tr>
<td colspan="2" height="30" bgcolor="#0099FF">
<div align="center">[b]<font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#FFFFFF">.:
Registro de Usuarios :.</font>[/b]</div>
</td>
</tr>
<tr bgcolor="#FFFFCC">
<td width="158">
<div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Usuario
: </font></div>
</td>
<td width="170">[b]<font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<input type="text" name="usuarionombre" class="imputbox" maxlength="15">
</font>[/b]</td>
</tr>
<tr bgcolor="#FFFFCC">
<td width="158">
<div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Password
: </font></div>
</td>
<td width="170">[b]<font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<input type="password" name="password1" class="imputbox" maxlength="15">
</font>[/b]</td>
</tr>
<tr bgcolor="#FFFFCC">
<td width="158">
<div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Password
(repitalo) : </font></div>
</td>
<td width="170">[b]<font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<input type="password" name="password2" class="imputbox" maxlength="15">
</font>[/b]</td>
</tr>
<tr bgcolor="#FFFFCC">
<td width="158">
<div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Nivel
de Acceso : </font></div>
</td>
<td width="170">[b]<font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<input type="text" name="nivelacceso" class="imputbox" size="4" maxlength="4">
</font>[/b]</td>
</tr>
<tr bgcolor="#FFFFCC">
<td colspan="2" height="40">
<div align="center">
<input type="submit" name="Submit" value=" Registrar " class="botones" >
</div>
</td>
</tr>
</table>
</form>
HTML;
}
if ($_GET['accion']=="hacernuevo"){
$usuario=$_POST['usuarionombre'];
$pass1=$_POST['password1'];
$pass2=$_POST['password2'];
$nivel=$_POST['nivelacceso'];
if ($pass1=="" or $pass2=="" or $usuario=="" or $nivel=="") {
header ("Location: $pag?accion=nuevo&error=1");
exit;
}
if ($pass1 != $pass2){
header ("Location: $pag?accion=nuevo&error=2");
exit;
}
if (!eregi("[0-9]",$nivel)){
header ("Location: $pag?accion=nuevo&error=3");
exit;
}
$usuarios_consulta = mysql_query("SELECT ID FROM $sql_tabla WHERE usuario='$usuario'") or die(mysql_error());
$total_encontrados = mysql_num_rows ($usuarios_consulta);
mysql_free_result($usuarios_consulta);
if ($total_encontrados != 0) {
header ("Location: $pag?accion=nuevo&error=4");
exit;
}
$usuario=stripslashes($usuario);
$pass1 = md5($pass1);
mysql_query("INSERT INTO $sql_tabla values('','$usuario','$pass1','$nivel')") or die(mysql_error());
mysql_close();
header ("Location: $pag");
exit;
}
?>
</BODY>
</HTML>
Bueno, ya con esto tenemos el sistema casi terminado, solo nos faltan algunos detalles como los mensajes de error y por supuesto, como demonios se usan este monton de archivos
este mostrara los mensajes de error y es importante asi que porque lo ponga de ultimo no dejeis de crearlo, pueden esditar los mensajes :wink:
aut_mensaje_error.inc.php
<?
// Mensajes de error.
$error_login_ms[0]="No se pudo conectar con Base de datos Usuarios";
$error_login_ms[1]="No se pudo realizar consulta a la Base de datos Usuarios";
$error_login_ms[2]="Password ó Usuario no existe";
$error_login_ms[3]="Password no valida";
$error_login_ms[4]="Usuario no existe";
$error_login_ms[5]="No está autorizado para realizar esta acción o entrar en esta página";
$error_login_ms[6]="Acceso no autorizado! Registrese";
?>
este permitira a los usuarios el logout
aut_logout.php
<?
// Cargamos variables
require ("aut_config.inc.php");
// le damos un mobre a la sesion (por si quisieramos identificarla)
session_name($usuarios_sesion);
// iniciamos sesiones
session_start();
// destruimos la session de usuarios.
session_destroy();
?>
<html>
<head>
<title>Salir</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
Adios, usted ha salido correctamente
</body>
</html>
:shock: :shock: :shock:
y finalmente, para restringir una pagina, la ponen con todos estos archivos en el mismo lugar y le agregan estas lineas hasta arriba, esto hara require y tambien definira el nivel del usuario
<?
require("aut_verifica.inc.php");
$nivel_acceso=10; // Nivel de acceso para esta página.
// se chequea si el usuario tiene un nivel inferior
// al del nivel de acceso definido para esta página.
// Si no es correcto, se mada a la página que lo llamo con
// la variable de $error_login definida con el nº de error segun el array de
// aut_mensaje_error.inc.php
if ($nivel_acceso <= $_SESSION['usuario_nivel']){
header ("Location: $redir?error_login=5");
exit;
}
?>
es decir:
>> Cada página que requiera autentificación tiene que incluir el archivo aut_verifica.inc.php al principio del mismo:
require ("aut_verifica.inc.php");
A continuación defina las reglas de validación para el nivel de acceso de la página que requiera autentificación.
$nivel_acceso=10;
if ($nivel_acceso < $_SESSION['usuario_nivel']){
header ("Location: $redir?error_login=5");
exit;
}
0 es root o administrador.... :roll: :roll:
bueno espero que os sirva de algo, ya en otra explicare como hacer un sistema que permita al usuario registrarse dentro de la pagina (como en la mia)
http://www.mzstudios.net46.net/members/members/index.phpsaludos :wink: