diff --git a/README.md b/README.md
index cdc4a95c78df85c3d9b151a2c8840c79eb47e356..41d92b2e3de6daed1b02f43a7e6e6ecf35ef04c1 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,6 @@
 # Documentation
+**Note :** Non mise à jour depuis le TP7 (ou TP6). La gestion des erreurs et des retours de résultat a changé depuis. Les définitions des fonctions restent cependant pour la plupart encore valables.
+
 ## Objet
 Les fonctions publiques statiques retournent des arrays se basant sur ce format :
 ````php
diff --git a/controller/ControleurAuteur.php b/controller/ControleurAuteur.php
index 2cabde191b5051afc9b96128d6122e269d06f623..db27686e1ff907a87b764d1ec5b99f910fac04fa 100644
--- a/controller/ControleurAuteur.php
+++ b/controller/ControleurAuteur.php
@@ -22,6 +22,8 @@ class ControleurAuteur extends ControleurObjet
             $object['title'] = $auteur->prenom . " " . $auteur->nom;
             $object['desc'] = "ID: $auteur->numAuteur<br>Date de naissance: $auteur->anneeNaissance";
             $object['url'] = "index.php?action=lireAuteur&numAuteur=$auteur->numAuteur";
+            $object['specialLink']['text'] = '<span><i class="fa fa-flag"></i> Définir ses nationalités</span>';
+            $object['specialLink']['url'] = "index.php?action=definirNationalites&numAuteur=$auteur->numAuteur";
             $objects[] = $object;
         }
         return view('data-grid', [
@@ -49,6 +51,7 @@ class ControleurAuteur extends ControleurObjet
 
     public static function definirNationalites(): string
     {
-        return "";
+        $auteurs = Auteur::getAuteursByNumLivre(15);
+        return print_r($auteurs);
     }
 }
diff --git a/controller/ControleurLivre.php b/controller/ControleurLivre.php
index 48e02257add1e6c2507cdd1eff6a0a473a257b22..8d47615b2cd0028d2ce3b7ce2ccc8359de001277 100644
--- a/controller/ControleurLivre.php
+++ b/controller/ControleurLivre.php
@@ -23,6 +23,8 @@ class ControleurLivre extends ControleurObjet
             $object['title'] = $livre->titre;
             $object['desc'] = "ID: $livre->numLivre<br>Année de parution: $livre->anneeParution";
             $object['url'] = "index.php?action=lireLivre&numLivre=$livre->numLivre";
+            $object['specialLink']['text'] = '<span><i class="fa fa-users"></i> Définir les auteurs</span>';
+            $object['specialLink']['url'] = "index.php?action=definirAuteurs&numLivre=$livre->numLivre";
             $objects[] = $object;
         }
         return view('data-grid', [
diff --git a/index.php b/index.php
index 3bdc28580dbb75ccd88d6c62e6667431bbea083e..03d008de26b38a49323e47e84becf99fb1adde24 100644
--- a/index.php
+++ b/index.php
@@ -31,6 +31,8 @@ if (empty($_REQUEST["action"])) {
             "describeTable"  => ControleurObjet::describeTable(),
             "modifierObjet"  => ControleurObjet::modifyObject(),
             "supprimerObjet" => ControleurObjet::supprimerObjet(),
+            "definirAuteurs" => ControleurLivre::definirAuteurs(),
+            "definirNationalites" => ControleurAuteur::definirNationalites(),
             default          => ControleurAuteur::lireAuteur(),
         };
     } catch (Exception $e) {
diff --git a/models/Auteur.php b/models/Auteur.php
index da14485a82ed2d45d2461cb9b2c81c4c9d66bede..e00595053748615a712207a36bf8bcd64339a43d 100644
--- a/models/Auteur.php
+++ b/models/Auteur.php
@@ -33,7 +33,7 @@ class Auteur extends Objet
         return $tableau;
     }
 
-    public static function getAuteurByNum($numAuteur)
+    public static function getAuteurByNum($numAuteur): Auteur
     {
         // écriture de la requête
         $requetePreparee = "SELECT * FROM Auteur WHERE numAuteur = :num_tag;";
@@ -56,6 +56,25 @@ class Auteur extends Objet
         return $response;
     }
 
+    /**
+     * Récupère les auteurs d'un livre.
+     * @param int $i
+     * @return array
+     * @throws ErrorException
+     */
+    public static function getAuteursByNumLivre(int $i): array
+    {
+        // On prépare la requête
+        $queryString = ("SELECT * FROM Auteur NATURAL JOIN estAuteurDe WHERE numLivre = ?");
+        $query = Database::pdo()->prepare($queryString);
+        try{
+            $query->execute([$i]);
+        } catch (PDOException $e) {
+            throw new ErrorException($e->getMessage());
+        }
+        return $query->fetchAll(PDO::FETCH_CLASS, 'Auteur');
+    }
+
     // méthode static qui retourne un auteur identifié par son numAuteur
 
     public function afficher()
diff --git a/models/Livre.php b/models/Livre.php
index bde6024f752931bccd03f7fef748ea6955b78cea..4691948c7e62169cf8a68fe4ce59577eaa720cf8 100644
--- a/models/Livre.php
+++ b/models/Livre.php
@@ -64,6 +64,67 @@ class Livre extends Objet
         return $response;
     }
 
+    /**
+     * Récupère les auteurs n'ayant pas écrit ce livre.
+     * @param int $i
+     * @return array
+     * @throws ErrorException
+     */
+    public static function getNonAuteursByNumLivre(int $i): array
+    {
+        // On prépare la requête
+        $queryString = ("SELECT * FROM Auteur WHERE numAuteur NOT IN (SELECT numAuteur FROM Auteur NATURAL JOIN estAuteurDe WHERE numLivre = ?)");
+        $query = Database::pdo()->prepare($queryString);
+        try{
+            $query->execute([$i]);
+        } catch (PDOException $e) {
+            throw new ErrorException($e->getMessage());
+        }
+        return $query->fetchAll(PDO::FETCH_CLASS, 'Auteur');
+    }
+
+    /**
+     * Supprime un auteur d'un livre
+     * @param int $numLivre
+     * @param int $numAuteur
+     * @return void
+     */
+    public static function deleteAuteurForLivre(int $numLivre, int $numAuteur): void
+    {
+        // On prépare la requête
+        $queryString = ("DELETE FROM estAuteurDe WHERE numAuteur = :numAuteur AND numLivre = :numLivre");
+        $query = Database::pdo()->prepare($queryString);
+        try{
+            $query->execute([
+                "numAuteur" => $numAuteur,
+                "numLivre" => $numLivre
+            ]);
+        } catch (PDOException $e) {
+            throw new ErrorException($e->getMessage());
+        }
+    }
+
+    /**
+     * Ajout un auteur à un livre
+     * @param int $numLivre
+     * @param int $numAuteur
+     * @return void
+     */
+    public static function addAuteurForLivre(int $numLivre, int $numAuteur): void
+    {
+        // On prépare la requête
+        $queryString = ("INSERT INTO estAuteurDe (numAuteur, numLivre) VALUES (:numAuteur, :numLivre)");
+        $query = Database::pdo()->prepare($queryString);
+        try{
+            $query->execute([
+                "numAuteur" => $numAuteur,
+                "numLivre" => $numLivre
+            ]);
+        } catch (PDOException $e) {
+            throw new ErrorException($e->getMessage());
+        }
+    }
+
     /**
      * @return string
      */
diff --git a/models/Objet.php b/models/Objet.php
index 614f2597d554a83a2450b7cb20723536754db4ed..149b8670a86ebf94bae0330f77a284977f90b3a2 100644
--- a/models/Objet.php
+++ b/models/Objet.php
@@ -156,15 +156,15 @@ class Objet
 
         // On prépare la requête
         $queryString = ("SELECT * FROM $tableName WHERE " . $id["name"] . "=?");
-        $insertQuery = Database::pdo()->prepare($queryString);
+        $query = Database::pdo()->prepare($queryString);
         try {
             // Et on l'exécute
-            $insertQuery->execute([$id["value"]]);
+            $query->execute([$id["value"]]);
         } catch (PDOException $e) {
             throw new ErrorException($e->getMessage());
         }
 
-        return $insertQuery->fetch(PDO::FETCH_ASSOC);
+        return $query->fetch(PDO::FETCH_ASSOC);
     }
 
     /**
diff --git a/resources/views/data-grid.php b/resources/views/data-grid.php
index a0a6b0786b22e13536590c086cbb2f55579f46ab..ee9de8b7031ac10ce57b80996595f34b9d09b368 100644
--- a/resources/views/data-grid.php
+++ b/resources/views/data-grid.php
@@ -30,6 +30,14 @@
                                     <span><i class="fa fa-pencil"></i> Modifier</span>
                                 </a>
                             </li>
+                            @if(!empty($object['specialLink']))
+                            <li>
+                                <a class="btn btn-sm btn-outline-primary d-flex align-items-center ms-2"
+                                   href="{{ $object['specialLink']['url'] }}">
+                                    {{ $object['specialLink']['text'] }}
+                                </a>
+                            </li>
+                            @endif
                             <li>
                                 <a class="btn btn-sm btn-outline-danger d-flex align-items-center ms-2"
                                    href="index.php?action=supprimerObjet&tableName={{ $object['type'] }}&idName={{ $object['idName'] }}&idValue={{ $object['idValue'] }}">