Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    [PHP] Problemi con operatori logici

    Ciao a tutti,
    sto creando un sito che permette agli utenti di registrarsi con username e password.

    Le informazioni di registrazione vengono salvate su un file dat sul server in questa forma: username|password.

    La pagina che ho creato per il login, mi va a leggere le informazioni su questo file e quando trova la corrispondenza nome e pass per l'utente gli dovrebbe comunicare accesso effettuato.

    Il controllo dell'inserimento valido dei campi nel form e il confronto con le informazioni salvate nel file lo effettuo così:
    Codice PHP:
    $name $_POST['name'];
    $password $_POST['pass'];

    $fp file("log.dat");  // leggo il file
    foreach ($fp as $line) {
            
    $info explode("|"$line);  // il nome e la pass sono separati dalla barra
            
    if ($name==$info[0] && $password==$info[1]) {
                print 
    "Login effetuato!

    "
    ;
                print 
    "Benvenuto $name";
                exit;
            } else {
                             
    $errormessage "Informazioni non valide!";  // verrà stampato se alla fine
                    
    }                                                   // del foreach non è mai stato
    }                                                                   // effettuato il login

    // Altre istruzioni 
    Il problema risiede nella && che si trova all'interno della if.
    Mi segnala sempre Errore, nonostante nomeutente e pass siano corretti (per verificare ho fatto anche stampare il contenuto di $info[0] e $info[1] e li prende dal file sempre correttamente.

    Se sostituisco la && (o AND) con or, mi da login efffettuato solo se il nomeutente è corretto (cioè presente nel file), in quanto inserendo la pass giusta e un qualsiasi nome (evento che con la or dovrebbe darmi corretto) mi segnala errore.

    Sembra che la password non la riesca a confrontare!!

  2. #2
    Nessuno mi può aiutare?

    Credo sia il confronto della password inserita con quella presente nel file.

    Quel confronto fallisce sempre e secondo me è per quello che mettendo la or funziona (e prende solo il nomeutente) mentre la and (che richiede che entrambi siano veri) fallisce.

    Qualche aiuto?

  3. #3
    Originariamente inviato da devil89
    Qualche aiuto?
    perche' no.... quando estrai i dati con file() in fondo alla riga si trovano i caratteri di return/new line. Quindi questi si trovano accodati alla password e la comparazione fallisce.
    usa trim() per ripulire la password. Anzi mettilo anche a $name

    codice:
    ....
    
    if ($name == TRIM($info[0])  && $password == TRIM($info[1]))  {
    
    .....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Non so come ringraziarti piero.mac

    Ora funziona perfettamente!!!!

    Grazie mille

  5. #5

    ................

    Ciao.
    Penso che così sia + gestibile:
    $name = trim($_POST['name']);
    $password = trim($_POST['pass']);
    $fp = file("log.dat"); // leggo il file
    foreach ($fp as $line) {
    $info = explode("|", $line);
    $name = trim($info[0]);
    $password = trim($info[1]);
    $arr[$name] = $password;
    }

    if($arr[$name]==$password)
    {
    echo "Good !";
    }
    else
    {

    echo "Nice Try ";
    }
    Lo metti in una function che ti restituisce true o false
    ci associ un redirect et voilà.
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  6. #6
    Grazie anche a te Wisher.

    Hai sollevato una questione che mi interessa e che per il momento non so gestire;
    come creo una redirect?

    Cioè se io volessi, quando l'utente inserisce delle informazioni di accesso sbagliate, reindirizzarlo alla pagine del login dopo tot secondi, come posso fare?

  7. #7

    .........

    Ciao devi usare:
    header("Location: http://www.example.com/"); /* Redirect browser */
    /* Make sure that code below does not get executed when we redirect. */
    exit;
    e per la pagina dove fai il redirect
    <meta http-equiv="Refresh" content="5;url=http://www.w3schools.com">
    redirect
    meta refresh
    Stammi bene.
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  8. #8

    Re: ................

    Ciao Whisher,

    Scusa non riesco a capire questo tuo script:


    $name = trim($_POST['name']);
    $password = trim($_POST['pass']);
    $fp = file("log.dat"); // leggo il file
    foreach ($fp as $line) {
    $info = explode("|", $line);
    $name = trim($info[0]);
    $password = trim($info[1]);
    $arr[$name] = $password;
    }

    if($arr[$name]==$password)
    {
    echo "Good !";
    }
    else
    {

    echo "Nice Try ";
    }

    In che parte avviene il controllo della corrispondenza tra la user e password inserita e quelle reigistrate nel file?


    Questa parte non riesco a cipirla:

    $arr[$name] = $password;
    }

    if($arr[$name]==$password)
    {
    echo "Good !";
    }


    Grazie

    thelinuxbadguys

  9. #9

    E hai pure ragione ....

    Ciao.
    E scusa tanto ma nella fretta
    ho combinato una bischerata
    per farmi perdonare ti
    posto questa classetta
    questa funziona
    session_start();
    class ManageUserAuth {
    var $_username = "";
    var $_password = "";
    var $_usersFile = "";
    function startAuth($username,$password)
    {
    $this->_usersFile = "log.dat";
    $this->_username = (string)$username;
    $this->_password = (string)$password;
    }
    function getUsersValue($fileName)
    {
    $listUsers = array();
    $secret = file($fileName);

    foreach($secret as $row)
    {
    list($userName,$password)=explode("|",$row);
    $userName = trim($userName);
    $password = trim($password);
    $listUsers[$userName] = $password;
    }

    return $listUsers;
    }
    function doLogin()
    {
    $listUsers = $this->getUsersValue($this->_usersFile);
    if(array_key_exists($this->_username,$listUsers) && $listUsers[$this->_username]==$this->_password)
    {
    $this->setAuthed($this->_username);
    }
    else
    {
    $_SESSION['userName'] = "Guest";
    $_SESSION['islogged'] = FALSE;
    }
    }
    function setAuthed($userName)
    {
    unset($_SESSION['userName']);
    unset($_SESSION['islogged']);
    $_SESSION['userName'] = $userName;
    $_SESSION['islogged'] = TRUE;

    }

    }//
    $obj = new ManageUserAuth();
    $obj->startAuth($_POST['user'],$_POST['password']);
    $obj->doLogin();
    var_dump($_SESSION['islogged']);

    Stammi bene.
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  10. #10

    ........

    Ri-ciao.
    Dai un'occhio anche a questo
    script in cui si utilizza l'ip md5 e
    cookie è sul mio sitino ma
    in via del tutto eccezionale
    lo puoi trovare
    qui
    come si dice un pezzo di quà un pezzo di là
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

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.