diff --git a/app/controller/AdminController.php b/app/controller/AdminController.php
index f75758e9dd7698f67cb7d5dfe2a5db9f2c016b3b..fc80149564ad8a5b6d07bae439fc7d9e42b75c5a 100644
--- a/app/controller/AdminController.php
+++ b/app/controller/AdminController.php
@@ -119,11 +119,15 @@ class AdminController extends Controller {
         if($jeuactuel->type == "equipes"){
             $_SESSION['equipes'] = Admin::getEquipes($id);
             $_SESSION['jeu_select'] = $jeuactuel;
+            $_SESSION['id_partie'] = $id;
             header("location:modif/stepe1");
+            die();
         } else {
             $_SESSION['joueurs_select'] = Admin::getListeJoueur($id);
             $_SESSION['jeu_select'] = $jeuactuel;
+            $_SESSION['id_partie'] = $id;
             header("location:modif/step1");
+            die();
         }
     }
     
@@ -494,4 +498,111 @@ class AdminController extends Controller {
         $this->view->display();
     }
 
+    public function verifyModifPartieStep2()
+    {
+        session_start();
+        if (!isset($_SESSION['jeu_select'])) {
+            self::error("<h1>Erreur : le jeu doit être renseigné.</h1>", "step0");
+            die();
+        }
+
+        $jeu = $_SESSION['jeu_select'];
+        if ($jeu->type == 'equipes') {
+            if (!isset($_SESSION['equipes'])){
+                header("Location:stepe1");
+                die();
+            }
+        }
+        else {
+            if (!isset($_SESSION['joueurs_select'])) {
+                header("Location:step1");
+                die();
+            }
+        }
+
+        if (!isset($_POST['scores'])) {
+            if ($jeu->type == 'equipes') {
+                self::error("<h1>Erreur : variables absentes</h1>", "stepe2");
+                die();
+            }
+            else {
+                self::error("<h1>Erreur : variables absentes</h1>", "step2");
+                die();
+            }
+        }
+
+
+        $scores = $_POST["scores"];
+        foreach ($scores as $s) {
+            if (!is_numeric($s)) {
+                if ($jeu->type == 'equipes') {
+                    self::error("<h1>Erreur : les scores doivent être des nombres.</h1>", "stepe2");
+                    die();
+                }
+                else {
+                    self::error("<h1>Erreur : les scores doivent être des nombres.</h1>", "step2");
+                    die();
+                }
+            }
+        }
+        if ($jeu->type == 'equipes') {
+            $equipes = $_SESSION['equipes'];
+            $ns = count($scores);
+            $nj = count($equipes);
+            if ($ns != $nj) {
+                self::error("<h1>Erreur : scores et joueurs incohérents</h1>", "stepe2");
+                die();
+            }
+
+            $pb = Partie::modPartie($equipes, $scores, $jeu, $_SESSION['id_partie']);
+            if (!$pb) {
+                unset($_SESSION['equipes']);
+                unset($_SESSION['id_partie']);
+                unset($_SESSION['jeu_select']);
+                header('Location:valid'); // Redirection vers la page OK
+                die();
+            }
+            switch ($pb) {
+                case 2:
+                    self::error("<h1>Erreur de connexion à la BD.</h1>", "stepe2");
+                    die();
+                    break;
+                default:
+                    self::error("<h1>Erreur non gérée.</h1>", "stepe2");
+                    die();
+                    break;
+            }
+        }
+        else {
+            $joueurs = $_SESSION['joueurs_select'];
+            $ns = count($scores);
+            $nj = count($joueurs);
+            if ($ns != $nj) {
+                self::error("<h1>Erreur : scores et joueurs incohérents</h1>", "step2");
+                die();
+            }
+            $pb = Partie::modPartie($joueurs, $scores, $jeu, $_SESSION['id_partie']);
+            if (!$pb) {
+                unset($_SESSION['jeu_select']);
+
+                unset($_SESSION['id_partie']);
+                unset($_SESSION['joueurs_select']);
+                //self::error("<h1>DEBUGGING</h1>", "step2");
+                //die();
+                header('Location:valid'); // Redirection vers la page OK
+                die();
+            }
+            switch ($pb) {
+                case 2:
+                    self::error("<h1>Erreur de connexion à la BD.</h1>", "step2");
+                    die();
+                    break;
+                default:
+                    self::error("<h1>Erreur non gérée.</h1>", "step2");
+                    die();
+                    break;
+            }
+        }
+    }
+
 }
diff --git a/app/kernel/Router.php b/app/kernel/Router.php
index 70f8405bc359ec79428821eca3e228eefaa334c1..7423e56422f8ecaf2c48e404bc73dee6b74f620b 100644
--- a/app/kernel/Router.php
+++ b/app/kernel/Router.php
@@ -341,6 +341,12 @@ class Router
 				$result["params"]["slug"] = $parts[2];
 			}
 
+			else if($parts[0] == "admin" && count($parts) == 5 && $parts[1] == 'partie' && $parts[3] == 'modif' && $parts[4] == 'verifystep2') {
+				$result["controller"] = 'Admin';
+				$result['action'] = "verifyModifPartieStep2";
+				$result["params"]["slug"] = $parts[2];
+			}
+
             else if ($parts[0] == "add_partie" && count($parts) == 2 && $parts[1] == "addjoueurs1") {
                 $result["controller"] = "Partie";
                 $result["action"] = "addjoueurs1";
diff --git a/app/model/Partie.php b/app/model/Partie.php
index eea483c611e2e9c77995a3928c88443588e1cfcb..6ae8ae8fbe1fa8efa4edb9ba94544b7afd5f1a8a 100644
--- a/app/model/Partie.php
+++ b/app/model/Partie.php
@@ -84,6 +84,112 @@ class Partie extends Model
         return 0;
     }
 
+    public static function modPartie($joueurs, $scores, $jeu, $id_partie)
+    {
+        $db = Database::getInstance();
+        $sql3 = "SELECT score FROM  R_joueur_partie WHERE joueur = :id_joueur AND partie = :id_partie;";
+        $sql4 = "UPDATE R_joueur_partie SET classement=:classement, score=:score, score_partie=:score_partie
+                 WHERE partie=:partie AND joueur=:joueur;";
+        $sql5 = "UPDATE R_joueur_jeu SET score = :new_score WHERE joueur = :id_joueur AND jeu = :id_jeu;";
+        $sqlN = "INSERT INTO R_joueur_jeu (joueur, jeu, score) VALUES (:id_joueur, :id_jeu, :score);";
+        $stmt3 = $db->prepare($sql3);
+        $stmt4 = $db->prepare($sql4);
+        $stmt5 = $db->prepare($sql5);
+
+        $m = count($scores);
+        $old_score = array_fill(0, $m, 0);
+        $old_score_e = array();
+        foreach ($joueurs as $k => $joueur) {
+            // version avec équipes
+            if ($jeu->type == 'equipes') {
+                $old_score_e[$k] = array();
+                foreach ($joueur as $kj => $j) {
+                    if ($stmt3->execute(array(":id_joueur" => $j->slug, ":id_partie" => $id_partie))) {
+                        if ($row = $stmt3->fetch()) {
+                            // Le joueur a déja joué à ce jeu
+                            $old_score_e[$k][$kj] = $row[0];
+                        }
+                        else {
+                            // ou le joueur n'a jamais joué à ce jeu, on je rajoute à la relation.
+                            $old_score[$k] = 1000;
+                            $stmtN = $db->prepare($sqlN);
+                            if ($stmtN->execute(array(":id_joueur" => $joueur->slug, ":id_jeu" => $jeu->slug, ":score" => 1000))) {
+
+                            } else
+                                return 2;
+                        }
+                    }
+                }
+                $old_score[$k] = array_sum($old_score_e[$k]) / count($old_score_e[$k]);
+            } else {
+                // récupération du score actuel de chaque joueur
+                if ($stmt3->execute(array(":id_joueur" => $joueur->slug, ":id_partie" => $id_partie))) {
+                    if ($row = $stmt3->fetch()) {
+                        // Le joueur a forcément déja joué à ce jeu
+                        $old_score[$k] = $row[0];
+                    }
+                    else {
+                        // ou le joueur n'a jamais joué à ce jeu, on je rajoute à la relation.
+                        $old_score[$k] = 1000;
+                        $stmtN = $db->prepare($sqlN);
+                        if ($stmtN->execute(array(":id_joueur" => $joueur->slug, ":id_jeu" => $jeu->slug, ":score" => 1000))) {
+
+                        } else
+                            return 2;
+                    }
+                }
+            }
+        }
+        // Calcul de la nouvelle différence de scores et du classement de chacun dans la partie
+        $diff_scores = ELO_scores($old_score, $scores, 32);
+        $classement = self::calcul_classement($diff_scores);
+        foreach ($joueurs as $k => $joueur) {
+            if ($jeu->type_scores == 'classement') {
+                $score = null;
+            } else {
+                $score = $scores[$k];
+            }
+            if ($jeu->type == 'equipes') {
+                foreach ($joueur as $kj => $j) {
+                    // Insertion des infos de la partie (avec le score avant la partie et le classement interne à la partie
+                    // et le score de la partie) pour chaque joueur par équipe
+                    if ($stmt4->execute(array(":partie" => $id_partie,
+                        ":joueur" => $j->slug,
+                        ":classement" => $classement[$k], ":score" => $old_score_e[$k][$kj], ":score_partie" => $score))
+                    ) {
+                        $newS = $old_score_e[$k][$kj] + $diff_scores[$k];
+                        // On met à jour le score du joueur actuel dans sa relation avec le jeu
+                        if ($stmt5->execute(array(":new_score" => $newS,
+                            ":id_jeu" => $jeu->slug, ":id_joueur" => $j->slug))
+                        ) {
+                        } else
+                            return 2;
+                    } else
+                        return 2;
+                }
+            } else {
+                // Insertion des infos de la partie (avec le score avant la partie et le classement interne à la partie
+                //  et le score de la partie) pour chaque joueur
+
+                if ($stmt4->execute(array(":partie" => $id_partie,
+                    ":joueur" => $joueur->slug,
+                    ":classement" => $classement[$k], ":score" => $old_score[$k], ":score_partie" => $score))
+                ) {
+                    $newS = $old_score[$k] + $diff_scores[$k];
+                    // On met à jour le score du joueur actuel dans sa relation avec le jeu
+                    if ($stmt5->execute(array(":new_score" => $newS,
+                        ":id_jeu" => $jeu->slug, ":id_joueur" => $joueur->slug))
+                    ) {
+                    } else
+                        return 2;
+                } else
+                    return 2;
+            }
+        }
+
+        return self::updateClassement($jeu);
+    }
+
     public static function addPartie($joueurs, $scores, $jeu)
     {
         $db = Database::getInstance();