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

    Domanda su funzione get

    salve!
    in fase di login riempio un oggetto User che ha alcune proprietà.
    il problema però è che i valori vengono settati correttamente (in quanto sennò nn potrei fare il login).
    però la funzione get nn resituisce mai nulla.
    ad esempio:
    Codice PHP:
    class User {

        private 
    $user;
        private 
    $ruolo;

        public function 
    getUser() {
            return 
    $this->user;
        }

        public function 
    setUser($user) {
            
    $this->user $user;
        }

        public function 
    getRuolo() {
            return 
    $this->ruolo;
        }

        public function 
    setRuolo($ruolo) {
            
    $this->ruolo $ruolo;
        }
    .......... 
    faccio il login in questo modo: se nel db c'è la classica accoppiata user e password richiamo la funzione setUser() e setRuolo() prendoli dal db.

    però se in una pagina faccio:
    Codice PHP:
    require_once '../lib/user.php';
    $obj = new User();
    echo 
    'ruolo: ' $obj->getRuolo(); 
    nn esce nulla.

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    perchè inizializzi un nuovo oggetto User che quindi è vuoto! devi registrare l'oggetto da qualche parte, p.es. in una sessione, e recuperarlo da lì

  3. #3
    come ha detto eiyen, dato che l'oggetto non è settato nella classe e non lo setti
    dove la richiami è ovvio che sarà vuoto

  4. #4
    ok però c'è qualcosa che nn mi quadra.
    supponiamo una funzione del genere:
    Codice PHP:
        public function login($user$pwd) {
            try {
                
    $query $this->pdo->prepare('SELECT * FROM utenti WHERE username = ? AND password = ? LIMIT 1');
                
    $query->execute(array(
                    
    trim($user),
                    
    trim(sha1($pwd))
                ));
                if (
    $query->rowCount() == 1) {
                        
    $this->user = new User();
                        
    $this->user->setUser($user);
                        foreach (
    $query as $var) {
                            
    $this->user->setRuolo($var['ruolo']);
                        }
                        
    $this->user->createSession();
                        
    $_SESSION['tipo_utente'] = $this->user;
                } else {
                    echo 
    'Utente o password sbagliati';
                }
            } catch (
    PDOException $e) {
                echo 
    '<p class="error">' $e->getMessage() . '</p>';
                die();
            }
        } 
    quando faccio il login creao un nuovo oggetto User e lo metto in una variabile di sessione.
    il problema è che questo oggetto lo creo solo al submit di un form.
    giustamente mi da errore quando apro la pagina la prima volta:
    Codice PHP:
    Fatal errorCall to a member function getRuolo() on a non-object in /home/mhd-01/www.sito.it/htdocs/header.php on line 22 
    qua mi perdo.
    io ho delle funzioni che devo richiamare prima di fare il login (come anche una che controlla che la sessione sia stata creata).
    ma giustamente mi dice che l'oggetto nn esiste in quanto lo creo solo in fase di login.
    nn so se mi sono spiegato.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    ma qual è la riga 22?

    tu potresti, insomma:
    - gestire il login: quando è corretto inserisci la variabile in una sessione
    - gestire il controllo: leggi la variabile di sessione e:
    . se è impostata puoi recuperare le informazioni
    . se non lo è non c'è stato login e devi reindirizzare l'utente lì

    potresti memorizzare nella sessione solo l'id dell'utente o cmq un suo riferimento: quando controlli la var. di sessione, tramite l'id recuperi le altre info

  6. #6
    la riga 22 è questa:
    Codice PHP:
    echo 'ruolo: ' $obj->getRuolo(); 
    aspetta mi sa che nn mi sono spiegato.
    il fatto è questo.
    -vado su sito.it
    -faccio un controllo per vedere se l'utente è settato o meno e che ruolo ha
    -se l'utente nn è settato lo spedisco alla pagina di login

    il problema è che settando l'utente dentro una funzione per fare il login lui nn mi trova nessun utente all'inizio, e di conseguenza nn riesce a richiamare le funzioni di cui sopra (tipo getRuolo() ad esempio).
    in sostanza io mi dovrei creare a prescindere dal login un un nuovo oggetto User() da qualche parte.
    e in fase di login passargli quell'oggetto e riempirlo.
    poi avviene quello che mi dici te.
    questa è l'unica cosa che mi viene in mente.

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    ma infatti puoi fare come dici... cmq potresti gestire solo un "id" dell'utente, magari:
    1 - crei un oggetto vuoto
    2 - se c'è un id nella sessione usi questo e vai al punto 5
    3 - altrimenti fai fare il login
    4 - se il login è corretto setti l'id nella sessione
    5 - popoli l'oggetto in base all'id

  8. #8
    ok allora.
    nel costruttore della classe per gestire la connessione ho fatto così:
    Codice PHP:
    $this->objUser = new User();
    $_SESSION['user'] = $this->objUser
    $_SESSION['user'] lo uso nelle varie pagine per richiamare le funzioni dell'oggetto User.
    in fase di login:
    Codice PHP:
                if ($query->rowCount() == 1) {
                        
    $this->objUser ->setUser($user);
                        foreach (
    $query as $var) {
                            
    $this->objUser ->setRuolo($var['ruolo']);
                        }
                        
    $this->objUser ->createSession();
                    } 
    a rigor di logica dovrebbe funzionare.
    poi c'è la solita riga:
    Codice PHP:
    echo 'Ruolo: ' $_SESSION['user']->getRuolo(); 
    quando accedo alla pagina senza aver fatto il login ovviamente nn stampa nulla.
    ma dovrebbe ritornarmi il valore una volta fatto il login.
    e invece continua a nn ritornare nulla.

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    purtroppo non ho modo di rivederti il codice... tieni conto che potresti semplicemente gestire la cosa DENTRO la classe...

    ...nel costruttore controlli se c'è già un oggetto in sessione: se sì recuperi quello, altrimenti ne inizializzi uno vuoto

    tutto il resto è abbastanza "automatico": ad ogni aggiornamento devi aggiornare anche l'oggetto in sessione (lo fai dentro la classe stessa)

  10. #10
    Originariamente inviato da eiyen
    ...nel costruttore controlli se c'è già un oggetto in sessione: se sì recuperi quello, altrimenti ne inizializzi uno vuoto
    forse il problema potrebbe essere proprio questo.
    da come ho scritto il codice ora nn faccio un controllo per vedere se l'oggetto già esiste.
    quindi potrei fare una cosa del genere:
    Codice PHP:
            if ($_SESSION['user'] == NULL) {
                
    $this->objUser = new User();
                
    $_SESSION['user_admin'] = $this->objAdminUser;
            } else {
                
    // MI MANCA
            

    diciamo che mi manca l'else.
    nel senso, se già esiste come faccio a digrli di recuperare l'oggetto esistente?
    ho fatto alcune prove ma ho sempre qualche errore.

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.