Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Problema nella pagina di registrazione e login

    Ciao, sto cercando di fare una pagina di login e registrazione con php mvc ma senza usare framework.
    Nel file View/LoginSignup.php ho del codice html con due form:
    - uno per il login con l'action = public/indexLogin.php
    - e un altro fomr per la registrazione con l'action = public/indexRegister.php.


    Questi due file sono fatti in questo modo:


    public/indexLogin.php


    codice:
    $controller = new LoginController();
    $view = $controller->invoke();
    $view->render();
    e public/indexRegister.php


    codice:
    $controller = new RegisterController();
    $view = $controller->invoke();
    $view->render();
    Il metodo invoke() chiamato in public/indexLogin.php fa questo:
    codice:
    public function invoke() {
        $view = $this->check();
        return $view;
    }
    dove check() è:
    codice:
    public function check() {
       if(isset($_POST['submitL'])) {
           if(isset($_POST['username']) && isset($_POST['password'])) {
          $username = $_POST['username'];
          $password = $_POST['password'];
          f($this->checkData($username, $password)) {
              $_SESSION['logged_in'] = 1;
              $_SESSION['username'] = $username;
              $usersRepo = new UserRepository();
              $user = $usersRepo->findByUsername($username);
              $view = new View('Home');
              $view->setData('user', $this->user);
              return $view;
           }
        }
        else {
            $view = new View('LoginSignup');
            $view->setData('errorsL', $this->errorsL);
            return $view;
         }
         }
         else {
         $view = new View('LoginSignup');
         return $view;
         }
    }
    Il metodo invoke() chiamato invece in public/indexRegister.php fa questo:
    codice:
    public function invoke() {
        $view = $this->check();
        return $view;
    }
    dove check() è:
    codice:
    public function check() {
      if(isset($_POST['submitR'])) {
         if(isset($_POST['username']) && isset($_POST['password']) && isset($_POST['email'])) {
            $username = $_POST['username'];
            $password = $_POST['password'];
            $email = $_POST['email'];
            if($this->checkData($username, $password, $email)) {
               $usersRepo = new UserRepository();
               $user = new User();
               $user->setUsername($username);
               $user->setEmail($email);
               $user->setPassword($password);
               $user->saveRegister();
               $successesR['completed'] = "Registration completed successfully";
               $view = new View('LoginSignup');
               $view->setData('successesR', $this->successesR);
               return $view;
            }
            else {
               $view = new View('LoginSignup');
               $view->setData('errorsR', $this->errorsR);
               return $view;
            }
         }
         else {
            $view = new View('LoginSignup');
            $view->setData('errorsR', $this->errorsR);
            return $view;
         }
      }
      else {
         $view = new View('LoginSignup');
         return $view;
      }
    }
    Il metodo render() si trova in View/View.php e fa questo:
    codice:
    public function render(){
        extract($this->data);
        ob_start();
        require $this->path;
        ob_end_flush();
    }
    Sempre in View/View.php si trova il metodo setData($name, $value) che è fatto in questo modo:
    codice:
    public function setData($name, $value) {
        $this->data[$name] = $value;
    }
    Dove $data è un array definito all'inizio.

    La classe User (Model/User.php) rappresenta un utente (con i campi username, password, first_name...) e definisce i metodi get e set.
    Inoltre contiene i metodi load() e save().
    save() inserisce l'utente $this nel database:
    Codice PHP:
    public function save() {
        
    $new is_null($this->id);
        
    $db Database::getInstance();
        if(
    $new) {
            
    $sql "INSERT INTO 'users' ('username', 'password', 'email', 'first_name', 'last_name') "
            
    "VALUES (?, ?, ?, ?, ?)";
            
    $stmt $db->prepare($sql);
            
    $stmt->execute(array($this->getUsername(), $this->password$this->getEmail(), $this->getFirstName(), $this->getLastName());
            
    $this->id $db->lastInsertedId();
        }
        else {
            
    $sql "UPDATE 'users' SET 'username' = ?, 'password' = ?, 'email' = ?, 'first_name' = ?, 'last_name' = ? WHERE 'id' = ?";
            
    $stmt $db->prepare($sql);
            
    $stmt->execute(array($this->getUsername(), $this->password$this->getEmail(), $this->getFirstName(), $this->getLastName(), $this->id));
        }


    Ho due problemi con questo codice:
    1. Quando inserisco i dati corretti nel form della registrazione non viene inserito nessun nuovo utente nel database
    2. Una volta fatto il login, entro nella pagina della home dove (View/Home.php) ho
    codice:
    <p><?php echo "Hi ".$user->getUsername(); ?>
    quindi dovrebbe visualizzare la scritta "Hi Josh" se Josh è l'utente loggato in questo momento.
    Invece visualizza solo "Hi".


    Qualcuno saprebbe aiutarmi? Grazie!

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    228
    l'errore POTREBBE essere nel metodo load... per il resto funziona tutto? posta load() e vediamo

  3. #3
    Grazie per la risposta. Ecco il metodo load() (che si trova in Model/User.php):
    Codice PHP:
    public static function load(array $data) {
       
    $u = new User();
       
    $u->id $data['id'];
       
    $u->setUsername($data['username']);
       
    $u->password $data['password'];
       
    $u->setEmail($data['email']);      
       
    $u->setFirstName($data['first_name']);
       
    $u->setLastName($data['last_name']);
       return 
    $u;


  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    228
    che a sua volta richiama i metodi set...
    dovresti fare un po' di prove e capire dove ti perdi i valori... se mai vengano caricati

  5. #5
    I metodi set sono semplicissimi:
    Codice PHP:
    public function setUsername($username){
       
    $this->username $username;
    }


    public function 
    setPassword($password){
       
    $this->password $password;
    }


    public function 
    setEmail($email){
       
    $this->email $email;
    }


    public function 
    setFirstName($firstName){
       
    $this->firstName $firstName;
    }


    public function 
    setLastName($lastName){
       
    $this->lastName $lastName;


  6. #6
    Utente di HTML.it L'avatar di garakkio
    Registrato dal
    Dec 2011
    residenza
    Roma
    Messaggi
    480
    Immagino tu non abbia strumenti per il debug, ma hai almeno provato a fare un var_dump dell'oggetto?

    Aggiungo poi che usare cose come $db = Database::getInstance() non è il massimo della vita, sarebbe molto meglio iniettare
    l'oggetto $db nelle classi che lo devono usare.

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.