Ciao a tutti, attualmente ho una pagina .php (la View) (che contiene principalmente codice html) che contiene un form per il login e un form per la registrazione.
Nell'action del form richiamo un file .php (il file pubblico) che crea una istanza di un controller specifico per gestire gli input dei due form.
Questo controller prende i dati inseriti dall'utente, li elabora, controlla che i dati siano corretti ed esegue una insert (caso registrazione) o una select (caso login). Se ci sono errori passa tali stringhe di errori alla vista che li stamperà a video.
Quello che vorrei fare ora è usare Ajax (mai usato prima, e per ora, leggendo un pò su Internet, non c'ho capito quasi nulla) per rendere questi form migliori, cioè vorrei che il controllo dei dati e il loro risultato (dati corretti o meno) fosse fatto da Ajax, in modo asincrono.
Non so come iniziare.. Mi aiutate?
Quello che ho ora è:
View/LoginRegistrazione.php
public/index.php
public/indexSignup.php
Controller/LoginController.php
Controller/SignupController.php
Poi nel file .js ho sempre i vari controlli. Quindi controllo sia lato server che lato client.
Come aggiungo il codice per Ajax, non ho capito...
Nell'action del form richiamo un file .php (il file pubblico) che crea una istanza di un controller specifico per gestire gli input dei due form.
Questo controller prende i dati inseriti dall'utente, li elabora, controlla che i dati siano corretti ed esegue una insert (caso registrazione) o una select (caso login). Se ci sono errori passa tali stringhe di errori alla vista che li stamperà a video.
Quello che vorrei fare ora è usare Ajax (mai usato prima, e per ora, leggendo un pò su Internet, non c'ho capito quasi nulla) per rendere questi form migliori, cioè vorrei che il controllo dei dati e il loro risultato (dati corretti o meno) fosse fatto da Ajax, in modo asincrono.
Non so come iniziare.. Mi aiutate?
Quello che ho ora è:
View/LoginRegistrazione.php
Codice:
<form action="../public/index.php" method="post" id="modLogin_form" onSubmit="checkLogin()">
Username:
<input type="text" name="login_username" id="lu"/>
Password:
<input type="password" name="login_password" id="lp"/>
<input type="submit" value="Login" name="login-submit" onClick="checkLogin()"/>
</form>
<form action="../public/indexSignup.php" id="modSignup_form" method="post" onSubmit="checkSignup()">
Username:
<input type="text" name="reg_username" id="ru"/>
Password:
<input type="password" name="reg_password" id="rp" />
E-mail:
<input type="text" name="reg_email" id="re" />
<input type="submit" value="Sign up" name="reg-submit" onClick="checkSignup()"/>
</form>
public/index.php
Codice:
<?php
include_once '../Controller/LoginController.php';
$controller = new LoginController();
$view = $controller->invoke();
$view->render();
public/indexSignup.php
Codice:
<?php
include_once '../Controller/SignupController.php';
$controller = new SignupController();
$view = $controller->invoke();
$view->render();
Controller/LoginController.php
Codice:
class LoginController {
public $user;
public $userRepository;
public $view;
//Crea un array per gli errori
public $errorsL;
public function __construct() {
$this->userRepository = new UserRepository();
$this->errorsL = array();
$this->view = new View('LoginSignup');
$db = Database::getInstance();
}
public function checkData($username, $password) {
preg_match("/[\|\(\)<>%\*+={}@#']|(=)+(!)|[-]{2}/", $username, $arrayU);
preg_match("/[\|\(\)<>%\*+={}@#']|(=)+(!)|[-]{2}/", $password, $arrayP);
if($arrayU) {
$this->errorsL['login-incorrectUsername'] = "Incorrect username.";
$this->view->setData('errorsL', $this->errorsL);
return false;
}
else if($arrayP) {
$this->errorsL['login-incorrectPassword'] = "Incorrect password.";
$this->view->setData('errorsL', $this->errorsL);
return false;
}
else if($username === "" || $password === "") {
$this->errorsL['login-empty'] = "Some field are empty, please try again.";
$this->view->setData('errorsL', $this->errorsL);
return false;
}
else {
$this->user = $this->userRepository->findByUsername($username);
if($this->user != NULL) {
if($this->user->getPassword() === $password) {
return true;
}
else {
$this->errorsL['login-incorrectPassword'] = "Incorrect password.";
$this->view->setData('errorsL', $this->errorsL);
return false;
}
}
else {
$this->errorsL['login-unregisteredUser'] = "There is no user with this username.";
$this->view->setData('errorsL', $this->errorsL);
return false;
}
}
}
public function checkLogin() {
if(isset($_POST['login-submit'])) {
if(isset($_POST['login_username']) && isset($_POST['login_password'])) {
$username = $_POST['login_username'];
$password1 = $_POST['login_password'];
$password = addslashes($password1);
if($this->checkData($username, $password)) {
$_SESSION['logged_in'] = 1;
$_SESSION['username'] = $username;
header("Location: ../public/home.php", true, 302);
}
}
else {
$this->errorsL['login-empty'] = "Some fields are empty.";
$this->view->setData('errorsL', $this->errorsL);
}
}
else {
return;
}
}
public function invoke() {
$this->checkLogin();
return $this->view;
}
}
Controller/SignupController.php
Codice:
class SignupController {
public $user;
public $userRepository;
//Crea un array per gli errori e uno per i successi
public $errorsR;
public $successesR;
public $view;
public function __construct() {
$this->userRepository = new UserRepository();
$this->errorsR = array();
$this->successesR = array();
$this->view = new View('LoginSignup');
$db = Database::getInstance();
}
public function checkData($username, $password, $email) {
//code..
}
public function checkUsername($username) {
//code..
}
public function checkPassword($password) {
//code..
}
public function checkEmail($email) {
//code..
}
public function checkSignup() {
if(isset($_POST['reg-submit'])) {
if(isset($_POST['reg_username']) && isset($_POST['reg_password']) && isset($_POST['reg_email'])) {
$username = $_POST['reg_username'];
$password1 = $_POST['reg_password'];
$email = $_POST['reg_email'];
$password = addslashes($password1);
if($this->checkData($username, $password, $email)) {
$db = Database::getInstance();
$this->user = new User();
$this->user->setUsername($username);
$this->user->setEmail($email);
$this->user->setPassword($password);
$this->user->save();
$this->successesR['reg-completed'] = "Registration completed successfully.";
$this->view->setData('successesR', $this->successesR);
}
}
else {
$this->errorsR['empty-field'] = "Some fields are incorrect.";
$this->view->setData('errorsR', $this->errorsR);
}
}
else {
return;
}
}
public function invoke() {
$this->checkSignup();
return $this->view;
}
}
Poi nel file .js ho sempre i vari controlli. Quindi controllo sia lato server che lato client.
Come aggiungo il codice per Ajax, non ho capito...