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>