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

    Login:Controllare User e Pass

    Ciao a tutti!!!

    Sto cercando di fare un piccolo sistema di Login che mi protegga una pagina, mediante un user e una pass.
    Sia l'user che la pass vengono memorizzati, in maniera univoca, in un DB Mysql, i record in cui vengono memorizzari si chiamano rispettivamente user ed pass.
    Il mio problema nasce quando devo fare il controllo delle password e dell'username. Io ho fatto così:
    Ho creato una pagina login.html ,nella quale vi è un form con due campi testo e si chiamano password e username:

    ---------------------------------------------------------------------------------------------------------
    <form action="../script/php/directory/login.php" method="post" name="user" id="user">

    <input name="user" type="text" id="user" value="user"> <input name="pass" type="text" id="pass" value="pass">
    <input type="submit" name="Submit" value="Invia">
    </form>
    ---------------------------------------------------------------------------------------------------------
    Come potete vedere il form in questione punta ad uno script, login.php , nel quale teoricamente dovrebbe avvenire il Login e quindi il controllo dell'user e della pass passati dal form con quelli memorizzati nel DB.
    Il codice nella pagina login.php è il seguente:
    ---------------------------------------------------------------------------------------------------------
    <?php
    // Recupero i dati dal Form
    $username=$_REQUEST['user'];
    $password=$_REQUEST['pass'];

    // Parte relativa alla connessione al DB

    include("../config/config.php");

    $db = mysql_connect($db_host, $db_user, $db_password);
    if ($db == FALSE)
    die ("Errore nella connessione. Verificare i parametri nel file config.inc.php");
    mysql_select_db($db_name, $db)
    or die ("Errore nella selezione del database. Verificare i parametri nel file config.inc.php");

    // Faccio la query, per selezionere l'user e la pass memorizzati nel DB
    $query = "SELECT user, pass FROM nome_tabella WHERE user= '$username' AND pass= '$password' ";
    $result = mysql_query($query, $db);
    $row = mysql_fetch_assoc($result);
    $num = mysql_num_rows ($result);
    if ($result != '0'){
    if( $row[user] == $username && $row[pass] == $password){

    // Codice da inserire se il login è riuscito

    echo"Il Login ha funzionato";

    }else{
    // Codice da inserire se la Password è errata
    echo"Password ERRATA";
    }
    }else{
    //errore non esiste nessun username e password con quel valore
    }

    //Chiudo la Connessione al DB
    mysql_close($db);
    ?>
    ---------------------------------------------------------------------------------------------------------

    Il problema è questo se inserisco un username e una password errata, allora mi effettua il controllo, la stessa cosa accade se metto l'username e la password giusta. Ma se non inserisco nessun username e nessuna password, il login avviene lo stesso.
    Dove è che sbaglio?

    Ciao e grazie

  2. #2
    Utente di HTML.it L'avatar di Inoki
    Registrato dal
    Oct 2001
    Messaggi
    788

    Re: Login:Controllare User e Pass

    [supersaibal]Originariamente inviato da spiadadda
    <?php
    // Recupero i dati dal Form
    $username=$_REQUEST['user'];
    $password=$_REQUEST['pass'];

    [/supersaibal]
    Sbagli qui..
    Non c'è nessun controllo sull'invio di dati vuoti...
    io sostituirei con:
    Codice PHP:
    if(!isset($_POST['user'])){
        
    header("Location:index.html");
    }else{
        
    $username=$_POST['user'];

    Stessa cosa per la pass

    Questo può essere ulteriormente ottimizzato con il controllo if else usando la sintassi ? e :

    "La teoria è quando si sa tutto e niente funziona. La pratica è quando
    tutto funziona e nessuno sa il perché. In questo caso, abbiamo messo
    insieme la teoria e la pratica: non c'è niente che funziona... e nessuno sa
    il perché!" (Albert Einstein)

  3. #3
    Ok grazie mille ho fatto come mi consigliavi, cioè ho impostato un controllo, di tipo if-else, sulle variabili pass e user in modo tale da controllare se esse contengono qualcosa oppure no.

    Avrei un altra domanda:
    Se la password e l'username, passati allo script, sono uguali a quelle presente nel DB, allora in questo caso posso effettuare il Login, in particolare a me servirebbe sapere l'ID del record che contiene la pass l'user esatti (cioè quelli che mi consentono il login). E' possibile fare ciò??
    Come posso procedere??

    Naturalmente tutto ciò è sempre riferito allo script postato precedentemente

  4. #4
    Scusate ma ho trovato la soluzione da solo!

    E' una banalità, ma avvolte le risposte escono fuori quanto meno te lo aspetti e anche le cose più semplici possono diventare difficili.
    Comunque la risposta alla mia seconda domanda (per chi potesse essere utile) è questa:

    Bisogna modificare la query:

    $query = "SELECT user, pass FROM nome_tabella WHERE user= '$username' AND pass= '$password' ";

    in questo modo:

    $query = "SELECT user, pass, id FROM nome_tabella WHERE user= '$username' AND pass= '$password' ";

    se si vuole conoscere anche l'id, oppure in questo modo:

    $query = "SELECT * FROM nome_tabella WHERE user= '$username' AND pass= '$password' ";

    se si vogliono conoscere tutti gli altri record della tabella.

    Ciao

  5. #5
    Utente di HTML.it L'avatar di Inoki
    Registrato dal
    Oct 2001
    Messaggi
    788
    [supersaibal]Originariamente inviato da spiadadda
    Scusate ma ho trovato la soluzione da solo!

    E' una banalità, ma avvolte le risposte escono fuori quanto meno te lo aspetti e anche le cose più semplici possono diventare difficili.
    Comunque la risposta alla mia seconda domanda (per chi potesse essere utile) è questa:

    Bisogna modificare la query:

    $query = "SELECT user, pass FROM nome_tabella WHERE user= '$username' AND pass= '$password' ";

    in questo modo:

    $query = "SELECT user, pass, id FROM nome_tabella WHERE user= '$username' AND pass= '$password' ";

    se si vuole conoscere anche l'id, oppure in questo modo:

    $query = "SELECT * FROM nome_tabella WHERE user= '$username' AND pass= '$password' ";

    se si vogliono conoscere tutti gli altri record della tabella.

    Ciao [/supersaibal]
    Esatto. ma attento..
    Se tu fai delle operazioni partendo da quella stringa, rischi che, nel caso non ci sia corrispondenza di user e password tutta la pagina ti vada in errore..

    Cioè mi spiego
    se tu fai:
    Codice PHP:
    $sql="SELECT user, pass, id FROM tabella WHERE user='$user' AND pass='$pass'";
    $query=mysql_query($query); 
    Se uno inserisce user e pass sbagliate, ti andrà in errore, perchè quando vai a fare ad esempio

    $rs=mysql_fetch_array($query);

    Query in effetti non contiene nessun record e manderà il tuo script in errore..
    Allora non è saggio estrarre altre info mentre fai il controllo di user e pass..

    quindi ti conviene fare:
    Codice PHP:
    $sql="SELECT user FROM tabella WHERE $user='$user' AND pass='$pass'";
    $querymysql_query($sql);

    $countmysql_num_rows($query);
    if(
    $count>0){
        
    prosegui con tutti i controlli;
    }else{
        echo 
    "Non hai inserito user e pass corretti";

    Con mysql_num_rows() controlli quanti righe delal tabella corrispondono ai risultati della ricerca, nel caso sia maggiore di 0 (quindi esiste almeno un record che soddisfa la query) vuol dire che l'utente è stato riconosciuto ecc ecc ecc
    "La teoria è quando si sa tutto e niente funziona. La pratica è quando
    tutto funziona e nessuno sa il perché. In questo caso, abbiamo messo
    insieme la teoria e la pratica: non c'è niente che funziona... e nessuno sa
    il perché!" (Albert Einstein)

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.