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!