Foros del Web » Programando para Internet » PHP »

[PHP] Login con fichero .txt y PHP (problema al pulsar botón)

Estas en el tema de [PHP] Login con fichero .txt y PHP (problema al pulsar botón) en el foro de PHP en Foros del Web. Hola de nuevo, gente de forosdelweb. En esta ocasión os traigo otro asunto que me trae de cabeza. Seguimos con ejercicios de gestión de ficheros ...
  #1 (permalink)  
Antiguo 03/03/2014, 09:32
 
Fecha de Ingreso: febrero-2014
Mensajes: 4
Antigüedad: 10 años, 1 mes
Puntos: 0
Pregunta [PHP] Login con fichero .txt y PHP (problema al pulsar botón)

Hola de nuevo, gente de forosdelweb.

En esta ocasión os traigo otro asunto que me trae de cabeza. Seguimos con ejercicios de gestión de ficheros con PHP, concretamente nos toca realizar otro clásico, el formulario de Log in. Hasta la fecha he ido corrigiendo los errores que me iban surgiendo consultando diversas fuentes y a través del ensayo-error, pero la cosa se complica y tampoco puedo dedicarle tanto tiempo sólo a esta asignatura, así que me toca consultar a gente experta para no perder más tiempo.


PROBLEMA
Al pulsar el botón "Iniciar sesión" del formulario, aunque los campos estén vacíos me da el Log in por válido, por lo que no puedo proceder con la siguiente parte del ejercicio, que es redireccionar a los usuarios que se validaron con éxito a su correspondiente página, ya que, cualquiera que pulsase el botón sin introducir nada en los campos, podría acceder a la página.

Este es el formulario:
Código HTML:
<form action="u4_ej_04_portal.php" method="post" name="formulario_acceso">

<br />
<table border="2" cellpadding="10">
<tr>
<td colspan="2"><h2 class="en_cursiva">Foro</h2></td>
</tr>
<tr>
<td><input name="nickname" type="text" size="30" placeholder="Introduzca su usuario" /></td>
</tr>
<tr>
<td><input name="pass" type="password" size="30" placeholder="Introduzca su contraseña" /></td>
</tr>
<tr>'
<td colspan="2"><input name="enviar" type="submit" value="Iniciar sesión" class="boton negro redondo"/></td>
</tr>
</table>

</form> 

Y este el el código PHP que estoy completando:
Código PHP:
<?php
        
        
// Declaramos el directorio de ficheros (partiendo del directorio en el que estamos) y lo establecemos como actual
        // Comprobamos que se ha fijado como actual
        
if (chdir("ficheros")) {
            
//echo '<br /><p class="control_ruta_fichero">El directorio
            //    "C:\xampp\htdocs\phpws\u4_ej_04-05\ficheros"
            //    existe y ha quedado fijado como actual.</p><br />';
        
}
        else {
            echo 
'<br /><br /><p class="control_ruta_fichero">El directorio
                "C:\xampp\htdocs\phpws\u4_ej_04-05\ficheros"
                no existe y no se ha podido fijar como actual.</p><br />'
;
        }
        
        
        
        
        
// -------------------------------------------------------------------------------------------------------------------------------------------
        
        
                
        // Declaramos las variables $nick y $pwd haciendo referencia a sus input correspondientes
        
if (!isset($_POST["nickname"])) $nick null// Si el campo de texto "nickname" está vacío, la variable $nick vale null.
        
else $nick $_POST["nickname"]; // Si el campo de texto "nickname" tiene contenido, la variable $nick vale el contenido introducido en el campo de texto "nickname".
        
        
if (!isset($_POST["pass"])) $pwd null// Si el campo de texto "pass" está vacío, la variable $pwd vale null.
        
else $pwd $_POST["pass"]; // Si el campo de texto "pass" tiene contenido, la variable $pwd vale el contenido introducido en el campo de texto "pass".
        
        
        // Declaramos la variable $fich_datos con el nombre del fichero .txt que vamos a usar
        
$fich_datos "pass.txt";
        

        
// CONDICIONES DE INICIO DE SESIÓN
        
if (isset($nick) && isset($pwd)) {
                
$id_puntero = @fopen($fich_datos"r"// Abrimos el fichero en modo lectura
                
or die('<p class="control_ruta_fichero">El fichero "pass.txt" no se ha podido abrir.</p><br />');
                
//echo '<p class="control_ruta_fichero">El fichero "pass.txt" existe y está abierto en modo añadir ("r").</p><br />';
            
                
$verificacion false// Declaramos la variable $verificacion como false por defecto
                
                                
                
while (!feof($id_puntero)) {
                    
$linea fgets($id_puntero);
                    
$array explode(";",trim($linea)); // Convertimos cada línea en un array cuyos componentes son los elementos seccionados por la función explode usando el delimitador ";" trim elimina los espacios en blanco de principio y final de la línea.
                    
if (@$array[3]==$nick && @$array[4]==$pwd) {  // Introduje el operador de control de errores (@) para omitir los undefined porque el código funcionaba correctamente pero me notificaba array con valores indefinidos).
                        
$verificacion true;
                        break;
                    }
                }
        
                    if (
$verificacion) {
                    echo 
'<br /><p class="control_ruta_fichero">Bienvenido.</p>'// Si $verificacion es true
                    
}
                    else {
                    echo 
'<br /><p class="control_ruta_fichero">Imposible acceder. Usuario o contraseña incorrectos. Revisa los datos introducidos e inténtalo de nuevo.</p>'// Si $verificacion es false
                    
}
            
            
fclose($id_puntero);
        } 
// Llave de cierre del if con isset nick...
        
        
        
else {
            echo 
'<br /><p class="control_ruta_fichero">Los campos del formulario están vacíos. Introduce tu usuario y contraseña.</p>';
        }
    
        
        
?>


P. S. El Log in funciona perfectamente, es decir, encuentra al usuario si existe y notifica si no es así. Pero, como decía, el problema está en que si pulso el botón sin escribir nada en los campos nickname y pass, da por válido el login.

¿Qué debo modificar para que esto no suceda?

Un saludo y gracias por vuestra atención.

Etiquetas: .txt, fichero, ficheros, inicio, login, mas, sesión, usando, validacion
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 21:16.