Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Problema con login in php usando un file

    Buon pomeriggio,

    ho creato due form (uno per la registrazione ed uno per il login) e memorizzo i dati della registrazione in un file (so che non è la soluzione migliore, dato che esistono i DB ma mi serve per imparare il codice). Quando vado a controllare se la persona è "loggata", facendo il controllo su username e password ho un problema:
    - la lunghezza dell'username e della password memorizzati nel file è sempre più grande di quella corretta (es. se username=pippo la lunghezza è 7 e non 5) per cui quando vado a confrontare i dati caricati dal form di login con quelli memorizzati nel file, anche se coincidono i dati mi viene fornito il risultato "non loggato".
    A me interessa semplicemente che mi venga dato in uscita loggato/non loggato...in questo momento non mi interessa aprire sessioni.
    Posto quì di seguito il codice scritto da me:

    CODICE PER LA REGISTRAZIONE (html)

    codice HTML:
    <head>
    <title>Registrati</title>
    </head>
    
    <body>
    <form name="registrazione" action="registrati.php" method="post">
    nome: <input type="text" name="nome" size="20"><br>
    cognome: <input type="text" name="cognome" size="20"><br>
    username:<input type="text" name="username" size="20"><br>
    password:<input type="password" name="password" size="20"> <br>
    conferma password: <input type="password" name="conferma" size="20"><br>
    <input type="submit" value="conferma">
    </form>
    </body>
    registrati.php

    Codice PHP:
    $nome=$_POST['nome'];$cognome=$_POST['cognome'];$username=$_POST['username'];$password $_POST['password'];$conferma=$_POST['conferma'];$fp=fopen("provafile","a+");if (($conferma==$password) and ($conferma!='')){fputs($fp,$nome"\r\n"); fputs($fp,$cognome"\r\n");  fputs($fp,$username"\r\n"); fputs($fp,$password"\r\n"); echo "registrazione effettuata <br />";}else{echo "non hai inserito nulla nei campi obbligatori! <br />";}fclose($fp); 
    login.html

    codice HTML:
    <head><title>login</title></head><body><form name="login" action="login2.php" method="post">username: <input type="text" name="username" size="20"><br>password: <input type="password" name="password" size="20"><br><input type="submit" value="invia"></form></body>
    login2.php

    Codice PHP:
    $username=$_POST['username'];$password=$_POST['password'];
    $fp=fopen("provafile""r");while(!feof($fp)){$nome=fgets($fp,20);$cognome=fgets($fp,20);$user=fgets($fp,20);$pass=fgets($fp,20);if ($user!=$username) echo "Non sei loggato";else "Sei loggato";}fclose($fp); 
    Spero mi possiate aiutare!!!

  2. #2
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    Stando a quanto dice la documentazione di fgets,
    La lettura termina quando sono stati letti length - 1 byte, oppure si incontra il carattere di newline (che viene incluso nel valore restituito)
    quindi quando recuperi il nome dell'utente con $user=fgets($fp,20); in realtà $user contiene sia il nome dell'utente, sia due caratteri aggiuntivi: il ritorno a capo e la nuova linea (\r\n). Al momento del confronto quindi fai "pippo\r\n" == "pippo", che è ovviamente falso.

    P.s: Quale spazio e qualche accapo qui e la rendono il codice più leggibile.
    Ultima modifica di .Kurt; 12-01-2015 a 16:50

  3. #3
    e quindi come dovrei risolvere il problema? aggiungo \r\n pure alla stringa che proviene dal form?

  4. #4
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    La soluzione "meno brutta" è quella di togliere il carattere separatore dalla stringa che recuperi. Lo puoi fare con trim. http://php.net/manual/it/function.trim.php

  5. #5
    grazie ho risolto!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.