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
e public/indexRegister.php
Il metodo invoke() chiamato in public/indexLogin.php fa questo:
dove check() è:
Il metodo invoke() chiamato invece in public/indexRegister.php fa questo:
dove check() è:
Il metodo render() si trova in View/View.php e fa questo:
Sempre in View/View.php si trova il metodo setData($name, $value) che è fatto in questo modo:
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.
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
quindi dovrebbe visualizzare la scritta "Hi Josh" se Josh è l'utente loggato in questo momento.
Invece visualizza solo "Hi".
Qualcuno saprebbe aiutarmi? Grazie!
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;
}
Codice:
public function check() {
if(isset($_POST['submitL'])) {
if(isset($_POST['username']) && isset($_POST['password'])) {
$username = $_POST['username'];
$password = $_POST['password'];
if($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;
}
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();
}
Codice:
public function setData($name, $value) {
$this->data[$name] = $value;
}
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.
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(); ?>
Invece visualizza solo "Hi".
Qualcuno saprebbe aiutarmi? Grazie!