Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 32
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2010
    residenza
    Caserta
    Messaggi
    44

    Verificare username e password in PHP e MySQL

    Ciao ragazzi... ho una domanda da farvi.... io ho una tabella in un db in cui inserisco username e password, e altri dati.... L'utente deve fare login da una pagina, e arrivare alla sua pagina nella quale vengono richiamati appunto questi dati...

    Il form richiama questo file...

    codice:
    <?php
    
    include ("config.inc.php");
    
    $conn = mysql_connect($hostname, $username, $password)
    or die("Connessione non riuscita: " . mysql_error()."
    ");
         
    // Seleziona il database
    mysql_select_db($database, $conn);
    
    mysql_select_db($database);
    $query = "select * from clienti order by id";
    $risultato = mysql_query($query);
    
    $tmp = mysql_fetch_array ($risultato);
    
    $username=$_POST['username'];
    $password=$_POST['password'];
    
    if $tmp['risultato'] == $username
    {
    header("Location: ../userpage.php");
    } else {
    header("Location: error_user.php");
    }
    if $tmp['risultato'] == $password
    {
    header("Location: ../userpage.php");
    } else {
    header("Location: error_pass.php");
    }
    ?>
    Ma non penso sia logicamente e sintatticamente corretto... qualcuno più aiutarmi? Grazie ragà!!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    111
    Codice PHP:
    $username=mysql_real_escape_string($_POST['username']);
    $password=mysql_real_escape_string($_POST['password']);

    $query "SELECT username,password FROM clienti WHERE username='$username' AND password='$password'";
    $risultato mysql_query($query);

    if(
    mysql_num_rows($risultato)>0)
    {
    header("Location: ../userpage.php")
    }

       else
    {
     
    errore


  3. #3
    Beh... la risposta di Seven7 è migliore della tua a livello logico, ma farei un paio di appunti.

    Innanzi tutto, filtrare gli input è cosa buona e giusta, ma forse andrebbe fatto qualcosa di più solido.
    Per capirci, la query viene eseguita anche se non si è scritto nulla ni campi della form... e questo è solo un esempio.

    Una procedura di accesso logica, poi, prevede che ci sia un solo utente associato ad una coppia di user/pass nel DB.
    Quindi io la comparazione la farei così:
    Codice PHP:
    if(mysql_num_rows($risultato) == 1) { 
           
    header("Location: ../userpage.php"
    } else  { 
     echo 
    "User inesistente o digitazione errata";

    Cercando di evitare doppioni di utente nel DB, magari con dei campi UNIQUE.
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2010
    residenza
    Caserta
    Messaggi
    44
    Ciao Seven e grazie mille per la risposta!! Io però devo selezionare tutta la riga, in quanto poi i dati li vorrei passare nella pagina userpage, come dati di riepilogo... devo usare le sessioni?

    Un'ultima domanda: se volessi reindirizzare l'utente a seconda del livello, come dovrei fare? Tipo ADMIN va alla pagina di amministrazione e TIZIO a quella utente...

    Grazie ancora per la disponibilità!

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2010
    residenza
    Caserta
    Messaggi
    44
    Grazie anche a te, alcio! Integrerò le due cose e renderò i campi userid e password come UNIQUE....

    ...per le altre cose che mi consigliate?

  6. #6
    Allora.
    Rispondo alla tua prima domanda: DEVI utilizzare le sessioni, altrimenti i dati dell'utente non riesci a propagarli e quindi a controllare che ogni volta che viene selezionata una pagina, questo poi sia effettivamente chi ha il diritto di visualizzarla!
    I metodi per fare una procedura solida di login sono molti, ti dico come farei io!

    Prima del redirect alla pagina di amministrazione, puoi creare un identificativo univoco dell'utente.
    Che ne so, potresti trasformare con MD5, il tempo di accesso alla pagina.
    Quella stringa alfanumerica, la salvi nel DB e nella sessione, e per ogni pagina protetta da password, fai il controllo che esista la sessione, e che il valore contenuto nella stessa esista nel DB.
    Io poi utilizzerei una tabella per gli utenti loggati, strutturata come segue:
    codice:
    ID - NOME_UTENTE - CODICE_UNIVOCO - DATA_LOGIN - DATA_LOGOUT
    Nella pagina di login, prima di effettuare il redirect, non fai altro che creare un codice univoco, e andare a creare un rigo nella tabella utenti_loggati.
    Mi spiego con un po' di codice:
    Codice PHP:
    if(mysql_num_rows($risultato) == 1) { 
       
    // creazione codice univoco per l'utente
       
    $codice_utente MD5(microtime());
       
    // salvataggio del codice nella sessione
       
    $_SESSION['codice_utente'] = $codice_utente;
       
       
    // preparazione dati per inserimento e
       // salvataggio dei dati nella tabella utenti_loggati
       
    $nome_utente funzioneFiltraggio($_POST['username']);
       
    /* funzioneFiltraggio è una funzione personalizzata
       * che ti creerai con tutte le possibili azioni per evitare
       * inserimento di dati errati
       * o tentativi di hacking */
       
    $data_login time();

       
    $sql "
        INSERT INTO utenti_loggati 
        (nome_utente, codice_univoco, data_login) 
        VALUE
        ('
    $nome_utente', '$codice_utente', $data_login)
       "
    ;
       
    /* qui metti il codice di esecuzione 
       * della query e tutto il resto
       * poi passi al redirect */

       
    header("Location: ../userpage.php"
    } else  { 
    echo 
    "User inesistente o digitazione errata"

    Ho scritto al volo per cui potrebbe esserci qualche errore, ma l'importante è che capisci il meccanismo.

    Per la tua seconda domanda, invece, se ti serve di gestire dei livelli di accesso, devi utilizzare una colonna in più nella tabella degli utenti del sito (quella che contiene nome e password per intenderci), dove vai ad inserire un riferimento al livello stesso.
    Che ne so, puoi scriverci, admin, user o power_user, oppure dei codici numerici.
    Nella query di accesso al sito - oltre a contare quanti record vengono restituiti, puoi fare la select per farti restituire il livello utente, da salvare nella tabella degli utenti loggati.
    Mi spiego:
    Codice PHP:
    $sql "
           SELECT livello 
           FROM clienti 
           WHERE username='
    $username
           AND password='
    $password'
    "
    ;
    $query mysql_query($sql);
    $num mysql_num_rows($query);
    $livello mysql_result($query'livello'0); 
    Naturalmente, anche la tabella degli utenti loggati deve avere un campo in più, livello appunto.
    Per il resto funziona tutto come sopra.
    Il redirect, poi, lo fai condizionato al livello utente.
    Oppure, nelle pagine interne della tua applicazione, mandi a video delle pagine diverse in relazione al livello utente.
    Nella sessione salva solo e sempre il codice univoco.
    Nelle pagine protette, non fai altro che fare una query alla tabella utenti_loggati per il codice, e poi ti fai tornare tutte l info che ti necessitano.

    L'argomento è molto vasto, e non è semplice da spiegare in un post come questo.... ma spero che ti possa avere dato degli spunti su cui lavorare.
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    111
    Per selezionare tutto metti l'asterisco:
    Codice PHP:
    session_start();

    $query "SELECT * FROM clienti WHERE username='$username' AND password='$password'"

    $risultato mysql_query($query);

    if(
    mysql_num_rows($risultato)>0)
    {
      
    $type_user=mysql_result($risultato,0,"type_user");

    if(
    $type_user=="admin")
         
    {
        
    $_SESSION['admin']=$username;
        
    header("location:pagina.php");
    }
     else 
    {
    $_SESSION['user']=$username;
        
    header("location:altra_pagina.php");
    }

    }

       else
    {
    errore


  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2010
    residenza
    Caserta
    Messaggi
    44
    Grazie ad entrambi!! Mi sto affacciando da poco al mondo del PHP, è affascinante ma un pò complicato.... oltre a modificare i codici che vedo in giro (penso che "smanettare" sia uno dei modi migliori per imparare), avete qualche testo idiota-friendly da consigliarmi?

  9. #9
    Originariamente inviato da Seven7
    Per selezionare tutto metti l'asterisco:

    Beh... non è il migliore dei consigli!
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  10. #10
    Originariamente inviato da doc83
    Grazie ad entrambi!! Mi sto affacciando da poco al mondo del PHP, è affascinante ma un pò complicato.... oltre a modificare i codici che vedo in giro (penso che "smanettare" sia uno dei modi migliori per imparare), avete qualche testo idiota-friendly da consigliarmi?
    Le guide che trovi nella sezione GUIDE di questo sito sono sempre un buono spunto di partenza.
    Cerca poi le PILLOLE che trovi in questo forum.
    Ci sono sempre delle ottime risorse da spulciare, studiare, capire e adattare ai propri scopi!

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

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.