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

    Login e registrazione, php e db

    Buongiorno!

    Volevo chiedervi gentilmente di indicarmi una semplice guida base per ciò che riguarda l'iter per la registrazione e il login utenti, e ciò che riguarda i codici Php e la connessione al Database.

    Buona giornata.

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Basta cercare "autenticazione php" oppure "authentication php" o simili, chiaramente in inglese troverai molte più cose.

    L'unica cosa, prima di metterti a seguire il tutorial, assicurati che NON usi le funzioni mysql_ per il collegamento col database, sono deprecate da PHP 5.5 e rimosse su PHP7.
    Devi cercare tutorial che come minimo usino mysqli_ o meglio ancora PDO.

  3. #3
    Aspettando che arrivino gli alieni a salvarci ho fatto e già testato questa sotto specie di "guida" utilizzando PDO che è sicuramente il modo più all' avanguardia per interagire con il DB. Ovviamente mi aspetto critiche e insulti dai big affinchè possa essere migliorata.
    Verranno creati i seguenti files:
    - config.php
    definisce il nome della tabella degli utenti, il nome delle colonne di username e password ed i parametri generali per l' accesso al DB.
    Verrà incluso sempre prima di ogni connessione al DB a meno che non ci si voglia connettere ad un altro DB
    - auth_class.php
    contiene le classi per l' autenticazione, il logout e per la connessione al DB
    - form_login.html
    contiene il modulo html
    - login.php
    esegue il login richiamando la classe c_auth() presente nel file auth_class.php
    - logout.php
    esegue il logout richiamando la classe c_auth() presente nel file auth_class.php
    - pagina_protetta.php
    effettua il test di verifica del login

    Il file config.php non fa altro che definire i parametri di connessione per il database.
    L' ho pensato per gestire connessioni anche ad altri DB specificando quindi l' istanza.
    config.php
    Codice PHP:
    define("DB_ISTANCE""mysql");
    define("DB_HOST_NAME""localhost");
    define("DB_USER""nomeutentedeldb");
    define("DB_PASS""password_del_db");
    define("DB_NAME""nomedeldb");
    define("USER_TABLE_NAME""nome_tabella_utenti");
    define("USER_COLUMN_NAME""nome_colonna_username");
    define("USER_COLUMN_PASS""nome_colonna_password"); 
    auth_class.php
    La classe c_db() effettua la connessione al DB. Necessita dei parametri di connessione inseriti nel file config.php, oppure di qualsiasi altro parametro per qualsiasi altra connessione.
    Codice PHP:
    class c_db
    {   
        public 
    $_link//Contiene la connessione al DB    
        //Crea la connessione   
        
    public function __construct($dbistance$host$user$pass$dbname)   
       {              
           
    //blocco try/catch di gestione delle eccezioni       
           
    try        
           {          
                
    $col $dbistance.":host=".$host.";dbname=".$dbname;          
                
    //la proprieta' $_link sarà l' oggetto della connessione           
                
    $this->_link = new PDO($col$user$pass);                 
           }       
           catch(
    PDOException $e)        
           {          
                
    //notifica in caso di errore nel tentativo di connessione          
                
    echo $e->getMessage();       
           }   
       }
    //method end       
    }//class end

    //Classe per il login/logout
    class c_auth
    {    
        
    //effettua l' autenticazione
        
    public function f_login($username$password)    
        {       
             
    //controllo campi vuoti e variabili non settate
             
    if(isset($username$password) and $username != "" and $password != "")       
             {           
                 
    $o_db = new c_db(DB_ISTANCEDB_HOST_NAMEDB_USERDB_PASSDB_NAME);                    
                 
    $sql "SELECT * FROM ".USER_TABLE_NAME." WHERE ".USER_COLUMN_NAME." = :username AND ".USER_COLUMN_PASS." = :password";           
                 
    $stmt $conn->_link->prepare($sql);           
                 
    // bind dei parametri           
                 
    $stmt->bindParam(':username'$username);           
                 
    $stmt->bindParam(':password'$password);           
                 
    //Eseguo la query           
                 
    $stmt->execute();
                 
    //Se esistono risultati il login e' andato a buon fine          
                 
    if($stmt->rowCount() > 0)           
                 {              
                      
    // creo un' array contenente il risultato              
                      
    $result $stmt->fetch();              
                      
    /*
                        Memorizzo in sessione i dati relativi all' utente loggato, 
                        ogni sessione avra' quindi la chiave associativa = al nome della colonna 
                        della tabella utenti, se la colonna che contiene l' username si chiama 
                        "username" la $_SESSION["user"]["username"] sarà la sessione contenente 
                        l' username
                      */              
                      
    foreach($result as $key => $value)              
                      {                  
                          
    $_SESSION["user"][$key] = $value;              
                      }              
                      print 
    "Accesso eseguito con successo.<br> <a href=\"pagina_protetta.php\">Vai alla pagina protetta</a>";              
                      
    /****************************************               
                       * ...o redirect dove ti pare con:               
                       * header("Location: dove_ti_pare.php");                                      
                       *****************************************/           
                 
    }           
                 else           
                 {               
                     print 
    "Login errato";           
                 }                  
             }
    //if campi vuoti    
             
    else         
             {            
                 print 
    "Specificare nome utente e password please ;-)";        
             }
    }
    //method end        

    //Esegue il logout
    public function f_logout()    
    {        
         
    session_destroy();        
         
    $msg "Hai effettuato il logout.<br><a href=\"form_login.html\">esegui il login</a>";          
         
    $msg .= "<br><a href=\"pagina_protetta.php\">Pagina protetta</a>";     
         print 
    $msg;     
         
    //...oppure una redirect:     
         //header("location: index.php");    
    }

    //class c_auth end 
    form_login.html
    Codice PHP:
    <form action="login.php" method="post">
     <
    input type="text" name="username"Username
     
    <br>
     <
    input type="password" name="password"Password
     
    <br>
     <
    input type="submit">
    </
    form

    login.php

    Codice PHP:
    //Avvio la sessione
    session_start();
    //includo la classe per il login
    include("auth_class.php");
    //includo il file config.php con i dati per l' accesso al DB
    include("config.php");
    $o_auth = new c_auth();
    $o_auth->f_login($_POST["username"], $_POST["password"]); 

    logout.php

    Codice PHP:
    //Avvio la sessione
    session_start();
    //includo la classe per il login
    include("auth_class.php");
    $o_auth =  new c_auth();
    $o_auth->f_logout(); 
    pagina_protetta.php farà da test per il login.
    Come prima cosa viene invocata la funzione session_start() grazie alla quale potremo utilizzare le variabili di sessione memorizzate in precedenza.
    La funzione session_start() non deve essere preceduta da nessun output (echo o print)
    pagina_protetta.php
    Codice PHP:
      //Avvio la sessione
      
    session_start();
      
    //Se non e' stato effettuato l' accesso blocco tutto  
      
    if(!isset($_SESSION["user"]))  
      {    
          print 
    "non sei loggato <a href=\"form_login.html\">esegui il login</a>";    
          
    //...o redirect    
          
    exit;  
      }    
      
    //se è stato effettuato l' accesso visualizza il contenuto  
      //...
      //...
      //... 
    Aspetto gli insulti, ciao!

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    306
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Devi cercare tutorial che come minimo usino mysqli_ o meglio ancora PDO.
    cosa cambia?
    dove stavano funzione mysql _ ora invece c'è mysqli_ o PDO?
    è una semplice sostituzione?

  5. #5
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    No, non è una semplice sostituzione.
    Da mysql_ a mysqli_ cambia poco, solo i parametri da passare alla funzioni, per esempio alle funzioni mysqli_ devi passare obbligatoriamente anche la variabile contenente la connessione al db, nelle funzioni mysql_ si poteva omettere, in tal caso si prendeva la connessione aperta, ma poteva creare confusione se si avevano attive più connessioni contemporaneamente. Sono cambiati anche altri parametri da passare, ma il cambio è abbastanza immediato.
    Questo se usi la versione procedurale di mysqli_ così come lo era mysql_.
    Esiste però anche la versione object oriented di mysqli, che rispetto a mysql_ è proprio un'altra cosa vista la natura diversa dell'approccio, il nome delle funzioni però rimane più o meno quello.

    La classe PDO invece con mysql_ non c'entra proprio niente, è solo object oriented ed ha funzioni tutte sue, sarebbe meglio imparare ad usare questo.

  6. #6
    le mysqli sono un miglioramento delle mysql, ti vincolano però ad utilizzare solo il database Mysql. PDO invece ti permette di interfacciarti a qualsiasi database poichè gestisce lei le differenze.

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    306
    Sto seguendo un corso che si basa su mysqli credo che non sia object oriented.
    Sto perdendo tempo?
    c'è un modo semplice (che spieghi con esempi chiari) per imparare il PDO?

  8. #8
    ma alla fine non è che pdo faccia chissà cosa, si tratta sempre di interagire con un database.
    Magari se non hai mai programmato ad oggetti forse potresti avere un po' di difficoltà.
    Ti faccio un piccolo esempio:
    Connessione con mysqli:
    Codice PHP:
    $link mysqli_connect("127.0.0.1""my_user""my_password""my_db");
    //dopodichè usi le funzioni mysqli per eseguire query e ricavare i dati 
    Connessione con PDO:
    Codice PHP:
    $link = new PDO("mysql:host=host;dbname=mysql""user""password");
    //eseguo una query col metodo query() di PDO
    $query $link->query("select * from tabella");
    //Ricavo l' array con i risultati
    $result $query->fetchAll(PDO::FETCH_ASSOC);
    //...ciclo per elencare i dati 
    Poi ci sono altri metodi che ti assicurano di poter evitare l' sql injection, se cerchi in rete trovi tutto.

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    306
    ciao Camionista
    grazie anche per avermi mostrato l'esempio
    ma quindi i due codici svolgono la stessa cosa?

  10. #10
    Si, è la solita solfa ;-)

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.