diff --git a/app/controller/JeuController.php b/app/controller/JeuController.php
index e3ceeea5afd591244fc43291649f4784461b6219..1b10c85ab47e37c35ce13c600c83f5c76b1d5031 100644
--- a/app/controller/JeuController.php
+++ b/app/controller/JeuController.php
@@ -181,4 +181,36 @@ class JeuController extends Controller {
     public function displayRequestValid() { // la fonction d'affichage de réussite
         $this->view->display(); // on affiche la page avec le message de réussite
     }
+
+    public function displayFavorisValid() { // la fonction d'affichage de réussite
+		session_start(); // on démarre une session pour avoir accès aux variables superglobales de session
+		$slug_jeu = $this->route["params"]["slug"];
+		if(!isset($_SESSION['connected'])) { // vérification que membre connecté
+			$this->view->msg_error = "Vous n'êtes pas connecté !";
+			$this->view->sous_msg = "Connectez-vous, puis revenez ajouter ce jeu. :)";
+			$this->view->display(); // on affiche la page avec le message d'erreur
+		}
+		else if(!(Jeu::checkExists($slug_jeu))) { // vérification que jeu existe
+			$this->view->msg_error = "Ce jeu n'existe pas !";
+			$this->view->sous_msg = "Vous pouvez peut-être demander son ajout via le formulaire de demande d'ajout de jeu. :)";
+			$this->view->display(); // on affiche la page avec le message d'erreur
+		}
+		else if(Profil::checkJeuFavoris($_SESSION['user']->slug, $slug_jeu)) { // si jeu déjà dans favoris => on le retire
+			Profil::upadteJeuFavoris($_SESSION['user']->slug, $slug_jeu, 0);
+			$this->view->msg_success = "Ce jeu a été retiré de vos favoris !";
+			$this->view->sous_msg = "Il en faut pour tous les goûts ! :)";
+			$this->view->display(); // on affiche la page avec le message de réussite
+		}
+		else { // sinon, on le met en favoris
+			if(Profil::checkADejaJoue($_SESSION['user']->slug, $slug_jeu)) { // si une ligne joueur-jeu existe déjà => UPDATE
+				Profil::upadteJeuFavoris($_SESSION['user']->slug, $slug_jeu, 1);
+			}
+			else { // sinon => INSERT avec des null pour le classement et le score
+				Profil::insertJeuFavoris($_SESSION['user']->slug, $slug_jeu, 1);
+			}
+			$this->view->msg_success = "Ce jeu a été ajouté à vos favoris !";
+			$this->view->sous_msg = ":)";
+			$this->view->display(); // on affiche la page avec le message de réussite
+		}
+    }
 }
diff --git a/app/kernel/Router.php b/app/kernel/Router.php
index 81c9f6e02c3826e05260f5c018ed726dd9298717..00fc88f638856a6910eadbdc0d05477d064e2644 100644
--- a/app/kernel/Router.php
+++ b/app/kernel/Router.php
@@ -55,8 +55,13 @@ class Router
 				$result["action"] = "displayRequestValid";
 				// il n'y a pas de paramètres attendus, on n'affecte pas $result["params"]
 			}
-            
-                /*** consultation des profils ***/
+			else if($parts[0] == "add_favoris" && count($parts) == 2) { // pour ajouter un jeu à ses favoris (add_favoris/nomdujeu)
+				$result["controller"] = "Jeu";
+				$result["action"] = "displayFavorisValid";
+				$result["params"]["slug"] = $parts[1]; //on a des paramètres dans l'URL (normalement le slug du jeu), on le stocke aussi
+			}
+			
+			/*** consultation des profils ***/
 			else if($parts[0] == "profil" && count($parts) == 2) { // consultation d'un profil : 2 morceaux (profil/pseudoDeLaPersonne)
 				$result["controller"] = "Profil"; 
 				$result["action"] = "display"; 
diff --git a/app/model/Profil.php b/app/model/Profil.php
index 1a05985e74ce4d0b2e9570af6bc36b4be492f29a..0fd63f1e87755f958a7b108051bedae35f55b361 100644
--- a/app/model/Profil.php
+++ b/app/model/Profil.php
@@ -71,6 +71,44 @@ class Profil extends Model { // classe de modèle pour l'affichage de profils
 
 		return 0; // on aurait pu mettre deux return (un dans le if et un ici), mais bon...
 	}
+	
+	public static function checkJeuFavoris($slug_joueur, $slug_jeu) { // méthode permettant de vérifier si un jeu est jeu favoris d'un joueur
+		$db = Database::getInstance(); // on récupère la connexion à la BDD
+		$sql = "SELECT * FROM R_joueur_jeu WHERE joueur = :slug_j AND jeu = :slug_jeu AND est_jeu_favoris";
+		$req = $db->prepare($sql); // on prépare la requête
+		$req->execute(array(":slug_j" => $slug_joueur, ":slug_jeu" => $slug_jeu)); // on remplace les variables dans la requête
+
+		if($result = $req->fetch()) { // on récupère l'enregistrement, s'il existe
+			return 1;
+		}
+		return 0;
+	}
+	
+	public static function checkADejaJoue($slug_joueur, $slug_jeu) { // méthode permettant de vérifier si un joueur a déjà joué à un jeu
+		$db = Database::getInstance(); // on récupère la connexion à la BDD
+		$sql = "SELECT * FROM R_joueur_jeu WHERE joueur = :slug_j AND jeu = :slug_jeu";
+		$req = $db->prepare($sql); // on prépare la requête
+		$req->execute(array(":slug_j" => $slug_joueur, ":slug_jeu" => $slug_jeu)); // on remplace les variables dans la requête
+
+		if($result = $req->fetch()) { // on récupère l'enregistrement, s'il existe
+			return 1;
+		}
+		return 0;
+	}
+	
+	public static function upadteJeuFavoris($slug_joueur, $slug_jeu, $favoris) { // méthode permettant de définir un jeu comme étant jeu favoris d'un joueur, ou l'inverse
+		$db = Database::getInstance(); // on récupère la connexion à la BDD
+		$sql = "UPDATE R_joueur_jeu SET est_jeu_favoris = :favoris WHERE joueur = :slug_j AND jeu = :slug_jeu";
+		$req = $db->prepare($sql); // on prépare la requête
+		$req->execute(array(":favoris" => $favoris, ":slug_j" => $slug_joueur, ":slug_jeu" => $slug_jeu)); // on remplace les variables dans la requête
+	}
+	
+	public static function insertJeuFavoris($slug_joueur, $slug_jeu, $favoris) { // méthode permettant de définir un jeu comme étant jeu favoris d'un joueur, ou l'inverse
+		$db = Database::getInstance(); // on récupère la connexion à la BDD
+		$sql = "INSERT INTO R_joueur_jeu VALUES (:slug_joueur, :slug_jeu, null, null, :favoris) ";
+		$req = $db->prepare($sql); // on prépare la requête
+		$req->execute(array(":slug_joueur" => $slug_joueur, ":slug_jeu" => $slug_jeu, ":favoris" => $favoris)); // on remplace les variables dans la requête
+	}
 }
 
 
diff --git a/app/view/Jeu/display.html b/app/view/Jeu/display.html
index 6d7cb413d9c5444b913eb7da7896740cfde7c692..0e5d6151c38a44aeaad3d3d04c4316176cff1768 100644
--- a/app/view/Jeu/display.html
+++ b/app/view/Jeu/display.html
@@ -12,6 +12,26 @@
                     <?php echo $this->jeu->description; ?>
                 </p>
             </div>
+			<?php 
+			if(isset($_SESSION['connected']) && $_SESSION['connected'] == true) {
+				if(Profil::checkJeuFavoris($_SESSION['user']->slug, $this->jeu->slug)) {
+				?>
+				<h2 class="stat-title">Vous n'aimez plus ce jeu ?</h2>
+				<div class="inscription-btn-container">
+					<a class="inscription-btn" href="<?php echo BASE_URL; ?>/add_favoris/<?php echo $this->jeu->slug; ?>">Retirez-le de vos favoris !</a>
+				</div>
+				<?php 
+				}
+				else {
+				?>
+				<h2 class="stat-title">Vous aimez ce jeu ?</h2>
+				<div class="inscription-btn-container">
+					<a class="inscription-btn" href="<?php echo BASE_URL; ?>/add_favoris/<?php echo $this->jeu->slug; ?>">Ajoutez-le à vos favoris !</a>
+				</div>
+				<?php 
+				}
+			}
+			?>
         </article>
         <div class="classement-card">
             <table class="classement-table">
diff --git a/app/view/Jeu/displayFavorisValid.html b/app/view/Jeu/displayFavorisValid.html
new file mode 100644
index 0000000000000000000000000000000000000000..c73d7cb1fc2f16e97ea081d643265fb429b563e4
--- /dev/null
+++ b/app/view/Jeu/displayFavorisValid.html
@@ -0,0 +1,23 @@
+<?php 
+	// session déjà démarrée dans le contrôleur, pas besoin de le faire ici
+	
+	$page_title = "Ajout du jeu à ses favoris"; 
+	include(ROOT."/app/view/Includes/header.include.html");
+	
+	if(!is_null($this->msg_success)) {
+?>
+	<article class="msg-valide"><h2><?php echo $this->msg_success; ?></h2></article>
+<?php 
+	}
+	else if(!is_null($this->msg_error)) {
+?>
+	<article class="msg-erreur"><h2><?php echo $this->msg_error; ?></h2></article>
+<?php 
+	}
+?>
+
+	<article>
+		<p><?php echo $this->sous_msg; ?></p>
+	</article>
+
+<?php include(ROOT."/app/view/Includes/footer.include.html"); ?>