Login PHP contra un fichero txt

Iniciado por Oshrik, 27 Diciembre 2012, 21:36 PM

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

Oshrik

Hola a todos/as,
ante todo daros las gracias.
He estado probando un aporte que lipman corrigio en Febrero, de hecho es el mismo,y probandolo tal cual solo me sale la pantalla en blanco al darle al botón enviar. Estuve imprimiendo por pantalla el valor de la variables en cada traza del código y el valor es el mismo que el que hay en el fichero. Pero toqueteando aqui y allá solo consegui que me pusiera false, a pesar, de que los print daban el valor del txt.
Volví a partir de 0, 4 veces, llegando al mismo resultado. Y no se que está mal. Os colgare todos los ficheros que he creado.
Como no me funcionó ese código no he ido más allá.
He probado de ponerle el: $_POST[]; al declarar la variable, pero el resultado es el mismo.
Seguro que hay algo que estoy haciendo mal, pero yo, no lo veo.
Si necesitais más datos como por ejemplo, donde lo estoy ejecutando, SO, etc. No duden en solicitarlo.

Fichero: inicio.html

<html>
<head>
<title>Mi sitio</title>
</head>
<body>
<form method="POST" action="login.php">
<label for="Usuario">Usuario: </label>
<input type="text" name="Usuario" id="Usuario"/><br />
<label for="password">Contraseña: </label>
<input type="password" name="password" id="password" /><br />
<input type="submit" value="Entrar" />
</form>
</body>
</html>


Fichero: usuarios.txt
      admin|tkm2000$

Fichero: login.php
<html>
<head>
<title></title>
</head>
<body>
<?
$user = "Usuario";
    $pass = "password";
     
     
    $f=fopen("usuarios.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);
?>
</body>
</html>


Esto es todo. Espero a ver usado los tags correctos. Es la primera vez que posteo en un foro...

#!drvy

#1
Buenas,

Para empezar, las variables $usuario y $password deben estar declaradas de forma que obtengan el contenido que se envia mediante el inicio.html. De la forma de la que las tienes declaradas ahora, obtienen usuario = Usuario y password = password. Vamos que es un string.


Código (php) [Seleccionar]
<?php

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

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

while(!
feof($f)){

    
$linea fgets($f);
    echo 
$linea."\n";
    
// 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.
        
echo $linea."\n";
        if(
preg_match("/(^".$user.")\|(".$pass.")/im"$linea,$result)){
            echo 
"ENTRO";
        } else { echo 
"password FALSO"."\n";  }
    } else { echo 
"usuario FALSO"; }

}

    
fclose($f);
?>


El codigo PHP te quedaría de la siguiente forma. Lo he modificado un poco porque realmente odio que no se pongan las llaves ( { } ) en los if's. Te puede confundir totalmente.

PD: Ten en cuenta que el usuario seria admin y la contraseña tkm2000.
PD2: Eso es realmente inseguro. Te recomiendo que al menos las guardes en un fichero .php inaccesible por los visitantes.

Saludos

Oshrik

Muchas gracias, drvy!!
Voy a ver si funciona.


Oshrik

No funcionó al principio. Total, que fui indagando. Cambie los tags del php <? ?> por <?php ?> y walaaa, funcionó. No se a que es debido, pero imagino que debe ser por la versión de php.
Muchas gracias a todos!!