Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Pagina di login

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    133

    Pagina di login

    Ciao a tutti! In questo tutorial dil login mi dà questo errore:

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in c:\programmi\easyphp1-8\www\login\login.php on line 29
    Nome Utente o Password errati


    Codice PHP:
    <?php
    // Includo la connessione al database
    require('config.php');
     
    // Se il modulo viene inviato...
    if(isset($_POST['login']))
    {
     
     
    // Dati Inviati dal modulo
     
    $cognome = (isset($_POST['cognome'])) ? trim($_POST['cognome']) : ''// Metto nella variabile 'cognome' il dato inviato dal modulo, se non viene inviato dò di default ''
            
    $nome = (isset($_POST['nome'])) ? trim($_POST['nome']) : ''// Metto nella variabile 'nome' il dato inviato dal modulo, se non viene inviato dò di default ''
     
    $pass = (isset($_POST['pass'])) ? trim($_POST['pass']) : ''// Metto nella variabile 'pass' il dato inviato dal modulo, se non viene inviato dò di default ''
     
     // Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza
     
    if (!get_magic_quotes_gpc()) {
         
    $cognome addslashes($cognome);
            
    $nome addslashes($nome);
      
    $pass addslashes($pass);
     }
     
     
    // Crypto la password e la confronto con quella nel database
     
    $pass md5($pass);
     
     
    // Controllo l'utente esiste
     
    $query mysql_query("SELECT id FROM utenti WHERE cognome = '$cognome', nome = '$nome' AND pass = '$pass' LIMIT 1");
     
     
    // Se ha trovato un record
     
    if(mysql_num_rows($query) == 2)
     {
      
    // prelevo l'id dal database
      
    $login mysql_fetch_array($query);
     
      
    // Creo una variabile di sessione
      
    $_SESSION['login'] = $login['id'];
     
      
    // reindirizzo l'utente
      
    header('Location: privata.php');
      exit;
     }
     
    // se non esiste da l'errore
     
    else
      die(
    'Nome Utente o Password errati');
    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">
    <">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Login</title>
    </head>
    <body>
    <form action="" method="post">
     <input name="cognome" type="text" id="cognome" value="COGNOME" onfocus="if(this.value=='Nome Utente') this.value='';" />

     <input name="nome" type="text" id="nome" value="NOME" onfocus="if(this.value=='Nome Utente') this.value='';" />

     <input name="pass" type="password" id="pass" value="Password" onfocus="if(this.value=='Password') this.value='';" />

     <input name="login" type="submit" value="Login" />

    </form>
    </body>
    </html>
    Confermo però che i nomi nel db vengono registrati, cognome, nome, pass ed email.

    Originariamente c'erano solo i campi user e pass, io ho messo nome, cognome.

    Dove sbaglio?

    Grazie!

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2005
    residenza
    http://www.okkioalprezzo.com/it/
    Messaggi
    206
    prova a mettere cosi
    Codice PHP:
     if(mysql_num_rows($query) != 0

  3. #3
    Secondo me invece c'è un errore nella query: prova ad inserire il seguente codice:

    Codice PHP:
    $query mysql_query("
        SELECT id 
        FROM utenti 
        WHERE cognome = '
    $cognome' , nome = '$nome
        AND pass = '
    $pass' LIMIT 1")
        OR DIE (
    "Errore Numero: ".mysql_errno()." - Descrizione: ".mysql_error()); 
    Ad ogni modo, vedendo la query ho capito dove sta l'errore: nella clausola di WHERE separi le prime due variabili da una virgola. Devi invece usare l'operatore logico AND anche li.
    Per cui:

    Codice PHP:
    $sql "
        SELECT id 
        FROM utenti 
        WHERE cognome = '
    $cognome
        AND nome = '
    $nome
        AND pass = '
    $pass'
    "

    L'altro errore poi è nel LIMIT che va tolto.
    Se limiti il risultato della query a 1, allora non ha senso chiedere allo script di controllare se il numero dei risultati è uguale a 2:
    // Se ha trovato un record
    if(mysql_num_rows($query) == 2)
    Perché lo script non individuerà mai due record.
    Peraltro, è proprio un errore di logica del funzionamento del login: se due o più utenti hanno lo stesso nome, cognome e password, allora vuol dire che hai impostato male tutta la procedura.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    133
    Grazie per la risposta, ma il risultato è uguale

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    133
    Grazie, ora ho messo l'AND e non mi dà più errore...accidenti quello è stato un errore di scrittura.

    Comunque non va ancora, mi dà nome utente errato o inesistente, ovviamente l'utente esiste e i dati sono corretti.

    Grazie!

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    133
    Ok alcio, grazie avevi ragione.
    Ho riavviato il pc ed ora funziona tutto alla perfezione


  7. #7
    La sua soddisfazione è il nostro miglior premio!


    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    133



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 © 2024 vBulletin Solutions, Inc. All rights reserved.