diff --git a/app/controller/ProfilController.php b/app/controller/ProfilController.php
index e5b24b9b5b1eb73b7f37fb4fc0d1e8a0379c40af..57b635cb2fd6fb4b9e99230f505e1c55b8723180 100644
--- a/app/controller/ProfilController.php
+++ b/app/controller/ProfilController.php
@@ -1,4 +1,5 @@
 <?php
+include(ROOT."/Image.php");
 
 class ProfilController extends Controller { // classe de contrôleur pour l'affichage des profils
 	public function display() {
@@ -12,4 +13,65 @@ class ProfilController extends Controller { // classe de contrôleur pour l'affi
 		$this->view->jeu_favori = $p;
 		$this->view->display(); // on affiche ce profil
 	}
+
+	public function displayEdit() {
+		$slug = $this->route["params"]["slug"]; // on récupère le "slug", en gros tout le reste de l'URL qui n'a pas encore servi
+		// je précise que dans ce cas précis, le $slug ne contient que le pseudo du joueur sosu forme normalisée. Donc je pourrais renommer la variable $slug_joueur...
+		$this->view->profil = Profil::getFromSlug($slug); // on utilise le modèle pour aller chercher en BDD le profil qui nous intéresse
+		$this->view->display(); // on affiche ce profil
+	}
+
+	public function displayValid() {
+		$slug = $this->route["params"]["slug"]; // on récupère le "slug", en gros tout le reste de l'URL qui n'a pas encore servi
+		// je précise que dans ce cas précis, le $slug ne contient que le pseudo du joueur sosu forme normalisée. Donc je pourrais renommer la variable $slug_joueur...
+		$this->view->profil = Profil::getFromSlug($slug); // on utilise le modèle pour aller chercher en BDD le profil qui nous intéresse
+		$this->view->display(); // on affiche ce profil
+	}
+	
+	public function verifyEdit() {
+		if (!isset($_POST['nom']) || !isset($_POST['prenom']) || !isset($_POST['email'])) { // si l'une des données manque, erreur
+			echo "<h1>Erreur : variables absentes</h1>";
+			die();
+		}
+		$slug = $this->route["params"]["slug"];
+		$profil = Profil::getFromSlug($slug);
+		if (isset($_POST['password']) && isset($_POST['password_bis']) && $_POST['password'] != "") {
+			if ($_POST['password'] == $_POST['password_bis']) {
+				$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
+				Profil::setPassword($slug, $password);
+			} else {
+				session_start(); // on démarre une session pour avoir accès aux variables superglobales de session
+				$_SESSION["registerErrCode"] = 4; // on stocke le code d'erreur
+				header('Location:../edit'); // on redirige vers la page de formulaire (il faut faire un retour dans le dossier parent pour que ça fonctionne)
+				die();
+			}
+		}
+		$data = $_POST;
+		if(!isset($data['avatar_suppr'])) {
+			if(isset($_FILES['avatar'])) {
+				list($err, $avatar) = getImage($_FILES['avatar'], 512, 512);
+				if ($err == 0) {
+					unlink(ROOT . "/www/images/avatar/" . $slug . ".jpg");
+					saveImage($avatar, ROOT . "/www/images/avatar/" . $slug . ".jpg");
+					$data['avatar'] = 1;
+				} elseif ($err == 1) {
+					$data['avatar'] = $profil->avatar;
+				} else {
+					session_start(); // on démarre une session pour avoir accès aux variables superglobales de session
+					$_SESSION["registerErrCode"] = $err; // on stocke le code d'erreur
+					header('Location:../edit'); // on redirige vers la page de formulaire (il faut faire un retour dans le dossier parent pour que ça fonctionne)
+					die();
+				}
+			} else {
+				$data['avatar'] = $profil->avatar;
+			}
+		} else {
+			unlink(ROOT."/www/images/avatar/".$slug.".jpg");
+			$data['avatar'] = 0;
+		}
+		Profil::setAutre($slug, $data);
+		session_start();
+		$_SESSION['user'] = Connexion::getUser($slug);
+		header('Location:valid');
+	}
 }
diff --git a/app/kernel/Router.php b/app/kernel/Router.php
index 821d272d624f41451fb3ced499df452074c542bc..c624faf931692f198e3cae908a8ecc6a255ba5b7 100644
--- a/app/kernel/Router.php
+++ b/app/kernel/Router.php
@@ -50,7 +50,25 @@ class Router { // classe PHP permettant l'analyse de l'URL des requêtes
 				$result["action"] = "display"; 
 				$result["params"]["slug"] = $parts[1]; 
 			}
+
+			else if($parts[0] == "profil" && count($parts) == 3 && $parts[2] == "edit") {
+				$result["controller"] = "Profil";
+				$result["action"] = "displayEdit";
+				$result["params"]["slug"] = $parts[1];
+			}
 			
+			else if($parts[0] == "profil" && count($parts) == 4 && $parts[2] == "edit" && $parts[3] == "verify") {
+				$result["controller"] = "Profil";
+				$result["action"] = "verifyEdit";
+				$result["params"]["slug"] = $parts[1];
+			}
+
+			else if($parts[0] == "profil" && count($parts) == 4 && $parts[2] == "edit" && $parts[3] == "valid") {
+				$result["controller"] = "Profil";
+				$result["action"] = "displayValid";
+				$result["params"]["slug"] = $parts[1];
+			}
+
 			/*** consultation des classements ***/
 			else if($parts[0] == "classement" && count($parts) > 1) { // si classement général : 2 morceaux(classement/global), si classement spécifique : 3 morceaux (classement/jeu/nomDuJeu)
 				$result["controller"] = "Classement";
diff --git a/app/model/Profil.php b/app/model/Profil.php
index 521528a953689f3ba834066c11ef457004dd0659..e3b1beeaf0895e444c1efcac72e076af37868303 100644
--- a/app/model/Profil.php
+++ b/app/model/Profil.php
@@ -19,6 +19,24 @@ class Profil extends Model { // classe de modèle pour l'affichage de profils
 		$req->setFetchMode(PDO::FETCH_CLASS, "Profil");
 		return $req->fetchAll();
 	}
+
+	public static function setPassword($slug, $password) {
+		$db = Database::getInstance(); // idem à au-dessus
+		$sql = "UPDATE R_joueur SET password = :password WHERE slug = :slug";
+		$req = $db->prepare($sql);
+		$req->execute(array(':password' => $password, ':slug' => $slug));
+	}
+	
+	public static function setAutre($slug, $data) {
+		$db = Database::getInstance(); // idem à au-dessus
+		$sql = "UPDATE R_joueur SET nom = :nom, prenom = :prenom, email = :email, avatar = :avatar WHERE slug = :slug";
+		$req = $db->prepare($sql);
+		$req->execute(array(':nom' => $data['nom'],
+							':prenom' => $data['prenom'],
+							':email' => $data['email'],
+							':avatar' => $data['avatar'],
+							':slug' => $slug));
+	}
 }
 
 
diff --git a/app/view/Profil/display.html b/app/view/Profil/display.html
index 2f7b6e1f47e89eae01a7ad16fcf3345ca6019e17..8bbf2e29ffdb172d588e12260b966bb35aef1070 100644
--- a/app/view/Profil/display.html
+++ b/app/view/Profil/display.html
@@ -88,6 +88,11 @@
 				<div class="more-link"><a href="" >Plus...</a></div>
 			</div>
 		</div>
+		<?php
+		if(isset($_SESSION['connected']) && $_SESSION['connected'] == true && $_SESSION['user']->slug == $this->profil->slug) {
+		?>
+				<div class="more-link"><a href="<?php print $this->profil->slug;?>/edit" >Modifier le profil</a></div>
+		<?php } ?>
 
     </article>
 	
diff --git a/app/view/Profil/displayEdit.html b/app/view/Profil/displayEdit.html
new file mode 100644
index 0000000000000000000000000000000000000000..e0075d9e61a9c02aa3c73987d9000828c54608bc
--- /dev/null
+++ b/app/view/Profil/displayEdit.html
@@ -0,0 +1,116 @@
+<?php
+	session_start();
+
+	$page_title = "Édition du profil de ".$this->profil->pseudo;
+	include(ROOT."/app/view/Includes/header.include.html");
+?>
+
+<?php
+		if(isset($_SESSION['registerErrCode'])) { // si message d'erreur
+			$errCode = $_SESSION['registerErrCode'];
+			if($errCode == 2) { // on détermine le message
+				$errMsg = '<h3>Pseudo déjà utilisé !</h3>';
+} elseif($errCode == 3) {
+$errMsg = '<h3>Adresse e-mail déjà utilisée !</h3>';
+} elseif($errCode == 4) {
+$errMsg = '<h3>Mots de passe différants</h3>';
+} elseif($errCode == 5) {
+$errMsg = '<h3>Problème sur l\'avatar</h3>';
+} elseif($errCode == 6) {
+$errMsg = '<h3>Le fichier n\'est pas une image</h3>';
+} elseif($errCode == 7) {
+$errMsg = '<h3>L\'image est trop grande</h3>';
+}
+echo '<article class="msg-erreur">'.$errMsg.'</article>'; // on affiche le message
+unset($_SESSION['registerErrCode']); // on retire la variable de session
+}
+?>
+
+<?php if(isset($_SESSION['connected']) && $_SESSION['connected'] == true &&
+    isset($_SESSION['user']) && $_SESSION['user']->slug == $this->profil->slug) { ?>
+<article>
+    <h2>Édition du profil de <?php print $this->profil->pseudo; ?></h2>
+        <div class="inscription-form">
+			<form  method="post" action="edit/verify" enctype="multipart/form-data" onsubmit="return checkForm();">
+				<div class="form-line">
+					<div class="validation-container-left">
+						<label for="password">Mot de passe* : </label>
+						<input type="password" name="password" id="password" onchange="if(this.value != '') callAjax('checkPassword', this.value, this.id);" />
+					</div>
+					<div class="validation-container">
+						<span id="rsp_password" class="validation-container-content"></span>
+						<input type="checkbox" disabled name="valid_password" class="validation-checkbox" />
+					</div>
+				</div>
+				<div class="form-line">
+					<div class="validation-container-left">
+						<label for="password_bis">Vérification mdp* : </label>
+						<input type="password" name="password_bis" id="password_bis" onchange="if(this.value != '') callAjax('checkPasswordBis', this.value+'¤'+$.(\'#password\').value, this.id);" />
+					</div>
+					<div class="validation-container">
+						<span id="rsp_password_bis" class="validation-container-content"></span>
+						<input type="checkbox" disabled name="valid_password_bis" class="validation-checkbox" />
+					</div>
+				</div>
+				<div class="form-line">
+					<div class="validation-container-left">
+						<label for="nom">Nom* : </label>
+						<input type="text" required="" name="nom" id="nom" <?php print "value=\"".$this->profil->nom."\"";?> />
+					</div>
+					<div class="validation-container">
+						<span id="rsp_nom" class="validation-container-content"></span>
+						<input type="checkbox" disabled name="valid_nom" class="validation-checkbox" />
+					</div>
+				</div>
+				<div class="form-line">
+					<div class="validation-container-left">
+						<label for="prenom">Prénom* : </label>
+						<input type="text" required="" name="prenom" id="prenom" <?php print "value=\"".$this->profil->prenom."\"";?>/>
+					</div>
+					<div class="validation-container">
+						<span id="rsp_prenom" class="validation-container-content"></span>
+						<input type="checkbox" disabled name="valid_prenom" class="validation-checkbox" />
+					</div>
+				</div>
+				<div class="form-line">
+					<div class="validation-container-left">
+						<label for="email">Adresse e-mail* : </label>
+						<input type="email" required="" name="email" id="email" <?php print "value=\"".$this->profil->email."\"";?> onchange="if(this.value != '') callAjax('checkEmail', this.value, this.id);" />
+					</div>
+					<div class="validation-container">
+						<span id="rsp_email" class="validation-container-content"></span>
+						<input type="checkbox" disabled name="valid_email" class="validation-checkbox" />
+					</div>
+				</div>
+				<div class="form-line">
+					<div class="validation-container-left">
+						<label for="description">Une description de vous : </label>
+						<textarea name="description" id="description" ><?php print $this->profil->description;?></textarea>
+					</div>
+				</div>
+				<div class="form-line">
+					<div class="validation-container-left">
+						<label for="avatar">Avatar</label>
+						<input type="file" name="avatar" id="avatar" />
+					</div>
+				</div>
+				<div class="form-line">
+					<div class="validation-container-left">
+						<label for="avatar_suppr">Supprimer l'avatar : </label>
+						<input type="checkbox" name="avatar_suppr" id="avatar_suppr" value="1"/>
+					</div>
+				</div>
+				<div class="submit">
+					<input type="reset" name="reset" value="Réinitialiser">
+					<input type="submit" name="submit" value="Modifier">
+				</div>
+			</form>
+        </div>
+    </article>
+    <?php } else {?>
+        <article class="msg-erreur">Vous n'êtes pas <?php print $this->profil->pseudo; ?></article>
+    <?php } ?>
+
+
+
+<?php include(ROOT."/app/view/Includes/footer.include.html"); ?>
\ No newline at end of file
diff --git a/app/view/Profil/displayValid.html b/app/view/Profil/displayValid.html
new file mode 100644
index 0000000000000000000000000000000000000000..3e111d3883ebeb0ae1ae0587f6ac51f73d30f036
--- /dev/null
+++ b/app/view/Profil/displayValid.html
@@ -0,0 +1,8 @@
+<?php 
+	$page_title = "Inscription réussie"; 
+	include(ROOT."/app/view/Includes/header.include.html");
+?>
+
+	<article class="msg-valide"><h2>Modifiction Réussi</h2></article>
+	
+<?php include(ROOT."/app/view/Includes/footer.include.html"); ?>