Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    115

    Far interagire classi e funzioni per login

    Ho trovato online questo scritp per la gestione utenti:

    Codice PHP:
    $stmt $mysqli->prepare("SELECT User_Cod, User_type, User_Pass_Login, User_Email FROM ole_user_acces WHERE User_Email = ? LIMIT 1")) {
    $stmt->bind_param('s'$E_mail_Login); // esegue il bind del parametro '$email'.
            
    $stmt->execute(); // esegue la query appena creata.
            
    $stmt->store_result();
            
    $stmt->bind_result($User_Cod$User_type$User_Pass_Login$User_Email); // recupera il risultato della query e lo memorizza nelle relative variabili.
            
    $stmt->fetch();

    e vorrei interagire con la classe per la connessione ma visto la mia poca esperienza non riesco a farlo funzionare, .

    Qualcuno potrebbe darmi qualche suggerimento ?

    Ringrazio tutti anticipatamente.
    Ultima modifica di gaza1960; 28-02-2015 a 13:40

  2. #2
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    cosa intendi con "interagire con la classe per la connessione"?

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    115
    così funziona

    Codice PHP:

    $mysqli 
    = new mysqli($option['host'], $option['user_db'], $option['pass_db'], $option['database']);

    if (
    $stmt $mysqli->prepare("SELECT User_Cod, User_type, User_Pass_Login, User_Email FROM ole_user_acces WHERE User_Email = ? LIMIT 1")) {
            
    $stmt->bind_param('s'$E_mail_Login); // esegue il bind del parametro '$email'.
            
    $stmt->execute(); // esegue la query appena creata.
            
    $stmt->store_result();
            
    $stmt->bind_result($User_Cod$User_type$User_Pass_Login$User_Email); // recupera il risultato della query e lo memorizza nelle relative variabili.
            
    $stmt->fetch();
            
    $password md5($UserPass); // codifica la password usando una chiave univoca.
            
    if($stmt->num_rows == 1) { // se l'utente esiste
                // verifichiamo che non sia disabilitato in seguito all'esecuzione di troppi tentativi di accesso errati.

                    
    if($User_Pass_Login == $password) { // Verifica che la password memorizzata nel database corrisponda alla password fornita dall'utente.
                        // Password corretta!
                        
    $user_browser $_SERVER['HTTP_USER_AGENT']; // Recupero il parametro 'user-agent' relativo all'utente corrente.

                        
    $User_type preg_replace("/[^0-9]+/"""$User_type); // ci proteggiamo da un attacco XSS
                        
    $_SESSION['User_type'] = $User_type;
                        
    $User_Cod preg_replace("/[^a-zA-Z0-9_\-]+/"""$User_Cod); // ci proteggiamo da un attacco XSS
                        
    $_SESSION['User_Cod'] = $User_Cod;
                        
    $_SESSION['login_string'] = hash('sha512'$password.$user_browser);
                        
    // Login eseguito con successo.
                        
    echo "OK";
                    } else {
                        
    // Password incorretta.
                        // Registriamo il tentativo fallito nel database.
                        
    $now time();
                        
    //$mysqli->query("INSERT INTO login_attempts (user_id, time) VALUES ('$user_id', '$now')");
                        
    echo "NO";
                    }

            } else {
                
    // L'utente inserito non esiste.
                
    return false;
            }
        } 
    Se invece utilizzo la conessione al db con le classi non funziona.

    Codice PHP:
    class NsbMySqlClass
    {

        
    // contiene la query
        
    private $query;
        
    // connessione e risorsa mysqli
        
    private $mysqli;
        
    // risultato con i dati estratti
        
    private $result;

        public function 
    __construct(){
            
    // Parametri di connessione
            
    $host 'localhost';
            
    $user 'root';
            
    $password 'werwer';
            
    $database 'werwer';
            
    $charset 'utf8';

            
    // connessione in construct per non chiamare il metodo
            
    $this->connect($host$user$password$database$charset);
        }

        public function 
    __destruct(){
            
    $this->disconnect();
        }

        
    // Metodo per la connessione
        
    public function connect($host$user$password$database$charset$port null$socket null){
            
    // creare la connessione
            
    $this->mysqli = new mysqli($host$user$password$database$port$socket);

            if(
    mysqli_connect_error()){
                exit(
    'Impossibile connettersi al DataBase'.$mysqli_connect_error);
            } else {
                
    $this->mysqli->set_charset($charset);
            }

            return 
    true;
        }
        
    // Per Disconnetterci
        
    public function disconnect(){
            
    $this->mysqli->close();
            return 
    true;
        } 

  4. #4
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    vediamo se ho capito, tu vuoi aprire la connessione con la tua classe e fare la query con l'altro script?

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    115
    Esatto, smanettando ho sempre usato le connessioni senza l'utilizzo della classe

  6. #6
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    la mossa più furba sarebbe mettere nella classe anche la funzione che ti esegue la query, dopo che hai instanziato la classe richiami la funzione

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    115
    Non volevo farlo per non far caricare funzioni che servono una sola volta. In realtà, questo script, ogni pagina che richiami interroga il db per verificare e questa parte la volevo tralasciare. Oppure reputi opportuno lasciarla ?

  8. #8
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    non ho capito
    una classe di collegamento al DB dovrebbe contenere tutte le funzioni per interagire con il DB... Mi pare inutile fare una classe che si connetta e poi gestire l'interrogazione con funzioni richiamate ogni volta al di fuori di essa

    a parte che una classe fatta bene te la riusi dove vuoi

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    115
    Posso mettere il link dove ho preso lo script ?

  10. #10
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    qui un esempio di classe per DB come la intendo io (connessione, operazioni, sicurezza, ecc)

    http://www.phpdevtips.com/2013/02/cu...database-class (il file da scaricare è in coda all'articolo)

    non l'ho analizzata a fondo per capire se è completa/sicura/ben fatta, mi sono soffermato sui metodi che offre

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.