Login en Php con txt

Iniciado por tunante2012, 23 Febrero 2012, 23:49 PM

0 Miembros y 1 Visitante están viendo este tema.

tunante2012

Hola saludos.... necesito hacer un codigo en php para poder validar login y use en php.... desde bloc de notas.. sin usar mysql(eso si se)... se como entrar valores y crear el archivo en bloc de notas ...
user1|clave1
user2|clave2
......|.....
.....|.....

alguien tiene idea de como se puede hacer validar el usuario y la contraseña   

‭lipman

Puedes recoger los valores

$_POST['user'];
$_POST['pass'];

Luego vas recorriendo el fichero de texto hasta que encuentres un user (hemos de suponer que los users son únicos), y en caso de dar true, comparar la contraseña.

Para separar user|password del fichero, puedes usar la función explode, y para aprender a recorrer un fichero, te recomiendo que leas acerca de las funciones fopen, feof, fclose...

Un saludo!

tunante2012

Te paso lo k he estado haciendo.... quisiera que me digas el error y si puedes ayudarme a corregirlo
session_start();
$Codigo = $_POST['usuario'];
$Clave = $_POST['contrasena'];

$abrir=fopen("usuario.txt","r") or die ("Error - No fue posible abrir el archivo");

while ($linea=fgets($abrir))
{
$partes=explode('|',trim($linea))
}
if (($Codigo==$partes[0]) && ($Clave==$partes[1]))
{
header('location:mantenimento.php');
}
else {
header('location:registro.html');

}

fclose("usuario.txt");

‭lipman

Especifícamente el error que te da, puede ser que sea porque usas "header" y para poder usar esta no debes tener codigo html encima de donde está esta función.

He hecho un código que funciona, pero primero te voy a decir el porqué tu forma no es eficiente:
Para empezar, dentro del while, estás todo el rato haciendo la función explode al principio. Esto no es necesario (ni siquiera es necesario usarla realmente) ya que si sabes que el usuario no corresponde con el usuario, para qué partirlo y gastar recursos?

Por otra parte, cuando uses "if"s de una línea, no pongas llaves para que se vea más limpio.

Por último y respecto al tema de seguridad, si haces lo de header:location, cualquiera que sepa la localización del que da como true, puede acceder (a no ser que lo securices). Yo recomendaria hacer includes.

Ahora, te paso el código que he hecho, el cual obviamente, es una prueba. Por cierto, para otra vez, pon el código entre los tags adecuados para que se vea mejor:

Código (php) [Seleccionar]
$user = "user4";
$pass = "pass4";


$f=fopen("text.txt","r");

while(!feof($f)){

$linea = fgets($f);

//Pregunto si la linea empieza por el nombre de usuario dado, y si le sigue la barra vertical
if(preg_match("/(^".$user."\|)/",$linea))
//En caso de ser correcto, compruebo que empiece por el nombre de usuario, contenga la barra, y acabe en la contraseña.
if(preg_match("/(^".$user.")\|(".$pass."$)/",$linea))
echo "ENTRO";
else
echo "FALSO";
else
echo "FALSO";
}

fclose($f);


Nota: las contraseñas están en el formato especificado, pero muy importante, para que funcione con lo que he puesto, el texto ha de estar en formato de Unix, sino no reconoce el símbolo $ (final de línea) de las expresiones regulares tal como deberia.

Un saludo!

tunante2012

jejejeej Gracias es mucho mejor que el k habia arreglado.......

Oshrik

Holaaaa!
antes de nada comentarte que es un gran aporte.
Por mi parte, debo comentarte que lo he probado, tal cual como lo has escrito, y lo unico que me sale, es todo el rato Falso. He ido poniendo print, y lo que lee del fichero y lo que guarda es lo mismo. Y no entiendo el porque. Soy nuevo en este foro, y no se si deberia abrir otro hilo subiendo los tres ficheros y intentar entre todos averiguar porque soy el unico paleto que no le funciona. Muchas gracias

#!drvy

#6
Hola @Oshrik, el tema es de Febrero de 2012, estamos a Diciembre. Lo mejor seria que abras otro hilo poniendo los códigos que tienes.


Saludos