diff --git a/app/controller/RegisterController.php b/app/controller/RegisterController.php new file mode 100644 index 0000000000000000000000000000000000000000..6174a635900ad93d6fd94b6b7e0f1bfbe4c075c7 --- /dev/null +++ b/app/controller/RegisterController.php @@ -0,0 +1,35 @@ +<?php + +class RegisterController extends Controller { // classe de contrôleur pour l'inscription au site + + public function displayValid() { // la fonction d'affichage de réussite + $this->view->display(); // on affiche la page avec le message de réussite + } + + public function displayForm() { // la fonction d'affichage du formulaire + $this->view->display(); + } + + public function verify() { // vérifie si le login est disponible + if(!isset($_POST['pseudo']) || !isset($_POST['password']) || !isset($_POST['nom']) || !isset($_POST['prenom']) || !isset($_POST['email'])) { // si l'une des données manque, erreur + //appeler une fonction d'erreur + echo "<h1>Erreur : variables absentes</h1>"; + die(); + } + + $data = $_POST; + $data['slug'] = self::slugify($_POST['pseudo']); + + $result = Register::check($data['slug'], $_POST['email']); // vérifie si le pseudo est libre et que l'adresse email n'est pas déjà utilisée + if($result == 1) { // connexion valide + Register::writedb($data);// on réalise l'inscription à l'aide d'une méthode de la classe Register + header('Location:valid'); // on redirige vers la page OK + } + else { + session_start(); // on démarre une session pour avoir accès aux variables superglobales de session + $_SESSION["registerErrCode"] = $result; // on stocke le code d'erreur + header('Location:../inscription'); // on redirige vers la page de formulaire (il faut faire un retour dans le dossier parent pour que ça fonctionne) + } + } + +} diff --git a/app/kernel/Controller.php b/app/kernel/Controller.php index f167d641a9f4cac2cc7e76be0dadbd9d0d210f1e..8652a281216ce502dbcd1d9b2e11b6988cdd73e9 100644 --- a/app/kernel/Controller.php +++ b/app/kernel/Controller.php @@ -8,4 +8,19 @@ class Controller { // classe abstraite de contrôleur $this->route = $route; // on stocke la route donnée en paramètre dans la variable protégée du même nom $this->view = new View($route); // on instancie une vue avec cette route, et on la stocke dans la variable protégée $view } + + static public function slugify($text) { // fonction permettant de transformer une chaîne de caractères en slug + $text = preg_replace('~[^\pL\d]+~u', '-', $text); // on remplace les caractères qui ne sont pas des lettres ou des chiffres par "-" + $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text); // on transforme la chaîne pour en retirer les accents + $text = preg_replace('~[^-\w]+~', '', $text); // on retire les caract-res non désirés (ie les accents seuls) + $text = trim($text, '-'); // on retire les caractères inutiles en début et fin de chaîne (ie les "-") + $text = preg_replace('~-+~', '-', $text); // on retire les "-" successifs + $text = strtolower($text); // on met la chaîne en caractères minuscules + + if (empty($text)) { // si le texte est vide, on retourne par défaut le texte "n-a" + return 'n-a'; + } + + return $text; + } } diff --git a/app/model/Register.php b/app/model/Register.php new file mode 100644 index 0000000000000000000000000000000000000000..eb604db98919412ee2adf771850358d4f91669b1 --- /dev/null +++ b/app/model/Register.php @@ -0,0 +1,46 @@ +<?php + +class Register extends Model { // classe de modèle pour l'inscription + public static function check($slug, $email) { // méthode permettant de vérifier si un compte-joueur est libre + // OK si personne avec même pseudo ou même adresse mail n'existe dans la BDD + // renvoie 1 si le compte est libre (= n'existe pas) + // renvoie 2 si pseudo déjà pris + // renvoie 3 si email déjà utilisé + + $db = Database::getInstance(); // on récupère la connexion à la BDD + $sql = "SELECT * FROM R_joueur WHERE slug = :slug OR email = :email"; + $req = $db->prepare($sql); // on prépare la requête + $req->execute(array(":slug" => $slug, ":email" => $email)); // on remplace les variables dans la requête + + $return = 1; //valeur par défaut si on n'a pas d'autre + if($result = $req->fetch()) { // on récupère l'enregistrement, s'il existe + if($result["slug"] == $slug) { + $return = 2; + } // si on a trouvé quelqu'un avec le pseudo, on ne peut pas faire l'inscription + else if($result["email"] == $email) { + $return = 3; + } // si on a trouvé quelqu'un avec l'e-mail, on ne peut pas faire l'inscription + } + + return $return; // on aurait pu mettre deux return (un dans le if et un ici), mais bon... + } + + public static function writedb($data) { // méthode réalisant l'inscription dans la BDD à partir d'un tableau de données + $db = Database::getInstance(); // on récupère la connexion à la BDD + + $sql = "INSERT INTO R_joueur (slug, pseudo, password, nom, prenom, email, description) VALUES (:slug, :pseudo, :password, :nom, :prenom, :email, :description)"; + $req = $db->prepare($sql); // on prépare la requête + $result = $req->execute(array(":slug" => $data['slug'], + ":pseudo" => $data['pseudo'], + ":password" => $data['password'], + ":nom" => $data['nom'], + ":prenom" => $data['prenom'], + ":email" => $data['email'], + ":description" => $data['description'])); // on remplace les variables dans la requête + + return $result; // on aurait pu mettre deux return (un dans le if et un ici), mais bon... + } +} + + + diff --git a/app/view/register/displayForm.html b/app/view/register/displayForm.html new file mode 100644 index 0000000000000000000000000000000000000000..dc78b924607bb48e55fbe4d2174c9add4dc45240 --- /dev/null +++ b/app/view/register/displayForm.html @@ -0,0 +1,33 @@ +<?php session_start(); ?> +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"/> + <title>Formulaire d'inscription</title> + <base href="http://localhost/projet-web-2016/www/"/> +</head> +<body> + <header> + <h1>Connexion au site</h1> + </header> + <?php if(isset($_SESSION['registerErrCode'])) { // si message d'erreur + $errCode = $_SESSION['registerErrCode']; + $errMsg = ($errCode == 2) ? '<h3 style="color:red;">Pseudo déjà utilisé !</h3>' : '<h3 style="color:red;">Adresse e-mail déjà utilisée !</h3>'; // on détermine le message à afficher + echo $errMsg; // on affiche le message + unset($_SESSION['registerErrCode']); // on retire la variable de session + } ?> + <form method="post" action="inscription/verify"> + <label for="pseudo">Pseudo* : </label> <input type="text" required="" name="pseudo" id="pseudo" /><br/> + <label for="password">Mot de passe* : </label> <input type="password" required="" name="password" id="password" /><br/> + <label for="password_bis">Vérification mdp* : </label> <input type="password_bis" required="" name="password_bis" id="password_bis" /><br/> + <label for="nom">Nom* : </label> <input type="text" required="" name="nom" id="nom" /><br/> + <label for="prenom">Prénom* : </label> <input type="text" required="" name="prenom" id="prenom" /><br/> + <label for="email">Adresse e-mail* : </label> <input type="email" required="" name="email" id="email" /><br/> + <label for="description">Une description de vous : </label><textarea name="description" id="description"></textarea><br/> + <input type="submit" value="Connexion" /> + </form> + <footer> + <p>Le pied de page</p> + </footer> +</body> +</html> diff --git a/app/view/register/displayValid.html b/app/view/register/displayValid.html new file mode 100644 index 0000000000000000000000000000000000000000..2be853cdd3125e1cad99fcba1f46d339d8bd5e60 --- /dev/null +++ b/app/view/register/displayValid.html @@ -0,0 +1,17 @@ +<?php session_start(); ?> +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"/> + <title>Connexion réussie</title> + <base href="http://localhost/projet-web-2016/www/"/> +</head> +<body> + <header> + <h1 style="color:green;">Vos identifiants sont corrects !</h1> + </header> + <footer> + <p>Le pied de page</p> + </footer> +</body> +</html>