Foros del Web » Programando para Internet » PHP »

Error: en Script de Autentificacion.

Estas en el tema de Error: en Script de Autentificacion. en el foro de PHP en Foros del Web. HOLA KE TAL, el siguiente es un script de autentificacion con el cual estoy trabajando y no me funciona a la perfección, ya que al ...
  #1 (permalink)  
Antiguo 01/11/2004, 12:16
 
Fecha de Ingreso: septiembre-2004
Ubicación: Hermosillo, Sonora, Mexico
Mensajes: 28
Antigüedad: 19 años, 7 meses
Puntos: 0
Error: en Script de Autentificacion.

HOLA KE TAL, el siguiente es un script de autentificacion con el cual estoy trabajando y no me funciona a la perfección, ya que al introducir el usuario y su password, no me da acceso mas que a solo el primer usuario de la base de datos, introduje varios usuarios nuevos en mi BD para probar este script y aun asi sigue restringuiendo el acceso a todos a exepcion del primer elemento (usuario) en mi base de datos.. cual seria mi error ?? ojala puedan ayudarme!! el script ke utilizo es el siguiente!!
Gracias!!!

--------------------------------------------------------------------------
INDEX .PHP
<html>
<head>
<title>Sistema</title>
</head>
<body>
<h1>Autentificación De Usuario</h1>
<form action="control.php" method="POST">
<table align="center" width="225" cellspacing="2" cellpadding="2" border="0">
<tr>
<td colspan="2" align="center"
<?if ($_GET["errorusuario"]=="si"){?>
bgcolor=red><span style="color:ffffff"><b>Datos incorrectos</b></span>
<?}else{?>
bgcolor=#cccccc>Introduce tu clave de acceso
<?}?></td>
</tr>
<tr>
<td align="right">USUARIO:</td>
<td><input type="Text" name="usuario" size="8" maxlength="50"></td>
</tr>
<tr>
<td align="right">PASSWORD:</td>
<td><input type="password" name="contrasena" size="8" maxlength="50"> </td>
</tr>
<tr>
<td colspan="2" align="center"><input type="Submit" value="ENTRAR"> </td>
</tr>
</table>
</form>
</body>
</html>
--------------------------------------------------------------------------
CONTROL.PHP
<?php
$servidor ="localhost";
$usuario ="root";
$clave ="mi clave";
$basedatos ="basedatos";

$conexion = mysql_connect($servidor, $usuario, $mi clave) or die(mysql_error());
mysql_select_db ("basedatos", $conexion) or die(mysql_error());
$query = mysql_query("SELECT * FROM autoriza", $conexion) or die("Invalid Query");


$array = mysql_fetch_array($query);

$arrayusuario = ($array["usuario"]);
$arraypassword = ($array["password"]);

if ($_POST["usuario"]=="$arrayusuario" && $_POST["contrasena"]=="$arraypassword"){

session_start();
session_register("autentificado");
$autentificado = "SI";
header ("Location: aplicacion.php");
}else {
header("Location: index.php?errorusuario=si");
}
?>
__________________
:aplauso: :aplauso: :aplauso: :aplauso: :aplauso: :aplauso: :aplauso:

Chino4Loves: agradezco de verdad tu ayuda

:arriba: :arriba: :arriba: :arriba: :arriba: :arriba: :arriba: :arriba:
  #2 (permalink)  
Antiguo 01/11/2004, 13:36
 
Fecha de Ingreso: agosto-2003
Ubicación: España
Mensajes: 202
Antigüedad: 20 años, 8 meses
Puntos: 0
Esto esta mal, tu sentencia SQL es errónea.
Tienes indicado a la mysql que busque en la tabla AUTORIZA, pero no le dices el que, es decir, tu le dices que busque, el, de por si, coje el primero, y ya esta, como debe crear un array, solo coje uno, eso por no enseñarte un error...
y que debes hacer?
pues, cambiar tu query y hacerlo "condicional", es decir que funcione según los datos de tu formulario.
Código PHP:
$usuario $_POST['usuario'];
$password$_POST['contrasena'];
$query mysql_query("SELECT * FROM autoriza WHERE usuario='$usuario' AND password='$password'"$conexion) or die("Invalid Query");
//Sigo con más modificaciones:
if($array mysql_fetch_array($query)){
session_start();
session_register("autentificado");
$_SESSION['autentificado'] = "SI";
session_register("usuario");
$_SESSION['usuario'] = $array("usuario");
session_register("pass");
$_SESSION['pass'] = $array("password");
//Aquí tienes un monton de sessiones MINIMAS para tu sistema.
header ("Location: aplicacion.php");
}else{
header("Location: index.php?errorusuario=si");

Voy a explicarte un poco las desventajas de tu sistema anterior:
1. Podias entrar sin usuario ni clave correctas, compruebalo...
2. Estabas autentificado, lo indicaba una session ( que no estaba definida correctamente), pero cuál era tu user? y tu pass?
3. No comprobaba de la forma mas optima, si el user y pass eran correctos, pero funcionaba...

Bueno, espero que este mini-code te haya servido...
BYE!
Entonces ejecutara la condicion de los usuarios.
  #3 (permalink)  
Antiguo 01/11/2004, 19:14
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 meses
Puntos: 41
Un par de cosas...
El manual sugiere no mezclar llamadas a funciones session_register() con el superglobal $_SESSION. La función session_register() está condenada a desaparecer. Además que en este caso no es necesario.
Y en segundo lugar... no es necesario guardar el username en una sesión para un sistema de autentificación básico. Aunque claro... viene muy bien guardarlo para hacer el script más funcional. Además se pueden guardar otras variables en la sesión que ya depende de tus propias necesidades. Pero lo que no veo útil es guardar el password. Si puedes da un ejemplo de para qué lo utilizarías por favor ;). En todo caso yo llamaría MINIMO a una variable que me diga si está autentificado o no.
Como te dije, no es necesario utilizar el session_register(). Puedes asignar directamente al superglobal $_SESSION. Por ejemplo para guardar el nombre de usuario en una variable de sesión:
Código PHP:
if($array mysql_fetch_array($query)){ 
session_start(); 
$_SESSION['usuario'] = $array["usuario"];// corrijo con [corchetes] los (paréntesis) 
header ("Location: aplicacion.php"); 
Un gran ejemplo (casi tutorial) sobre el tema de autentificación es el script "Autentificator" de Cluster. Te recomiendo darle una mirada al código, que por lo demás está muy bien explicado y comentado. Como dije, es casi un tutorial.

Saludos
  #4 (permalink)  
Antiguo 02/11/2004, 21:49
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 meses
Puntos: 41
Cita:
Iniciado por chino4loves en MP
(...)ahora kisiera ke el acceso a la pagina sea en dos niveles,, osea, ya ke permita el acceso mediante el login y password a solo el personal autorizado, ahora ke envie a dos paginas diferentes dependiendo del nivel en ke se encuentre el usuario a kien se le permitio el acceso, por ejemplo, un nivel de empleado cuyas capacidades en la pagina esten limitaddas, y un nivel de tecnico o supervisor cuyas capacidades en la pagina sean las mayores permitidas!!!

tengo la idea pero no sabria cual seria la estructura para este script,,

tengo ke krear dos tablas en mysql,??? una para kada nivel ??? o solamente algun otro campo en la primera tabla donde especifike el nivel ??
Bastará con definir un campo extra en la tabla de usuarios... pero te vuelvo a recomendar darle una mirada al Script Autentificator de Cluster... justamente el script define además una variable llamada "nivel de acceso" que es muy parecido a lo que estás necesitando... o en todo caso fácilmente adaptable... además define algunas cabeceras extra y algunos otros cuidados que se deben tener en cuenta en la autentificación... te va a servir bastante como nos ha servido a muchos de nosotros en su momento.
Lo puedes encontrar aquí:(perdón por no poner el enlace antes... se me pasó).
http://php.cluster-web.com/autentificator/

Saludos
  #5 (permalink)  
Antiguo 03/11/2004, 12:21
 
Fecha de Ingreso: agosto-2003
Ubicación: España
Mensajes: 202
Antigüedad: 20 años, 8 meses
Puntos: 0
Respuesta al Mismo MP ( enviado a mi cuenta):

Bién, eso tiene una fácil solución, ahora trataremos la página control.php.
unicamente debes añadir un campo más a tu tabla, para el ejemplo, la llamaremos nivel.
el admin es el nivel 2, y un usuario normal es el nivel 1.

Recuerda al hacer el insert de un usuario ponerle el nivel 1.

La página control seria algo así

Código PHP:
<?
$user 
$_SESSION[]; // SESSION DEL USUARIO ( DEFINELA TU)
$pass $_SESSION[]; // IGUAL QUE ANTES
$ssql mysql_query("SELECT * FROM autoriza WHERE usuario='$user' AND password='$pass'");
if(
$array mysql_fetch_array($ssql)){
if(
$array['nivel'] == 1){
include(
"nivel1.php"); /* Archivo que es para los usuarios del nivel 1, te recomiendo una comprobación en ese archivo para evitar que alguien entre directamente en el...*/
}elseif($array['nivel'] == "2"){

include(
"nivel2.php"); //Pasa igual que antes
}
}else{
echo 
" TUs datos no son correctos";
}
 
?>
Bueno amigo, espero que todo esto te sirva i te ayude
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:12.