diff --git a/WEB-INF/src/controleur/MessageController.java b/WEB-INF/src/controleur/MessageController.java
index 2527e1b3a8101f8a0f372d44b29e54c50742dab3..c9fac8bbb58b43e25b45cd64781c64c0511f91b8 100644
--- a/WEB-INF/src/controleur/MessageController.java
+++ b/WEB-INF/src/controleur/MessageController.java
@@ -5,7 +5,9 @@ import jakarta.servlet.annotation.WebServlet;
 import jakarta.servlet.http.HttpServlet;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
+import modele.dao.DaoLike;
 import modele.dao.DaoMessage;
+import modele.dto.Like;
 import modele.dto.Message;
 
 import java.io.IOException;
@@ -41,6 +43,26 @@ public class MessageController extends HttpServlet {
                     vue = "/WEB-INF/error.jsp";
                 }
                 break;
+
+            case "like":
+                try {
+                    int idMessage = Integer.parseInt(req.getParameter("message"));
+                    int idThread = Integer.parseInt(req.getParameter("thread"));
+                    DaoLike daoLike = new DaoLike();
+                    Like like = new Like(username, idMessage);
+
+                    // Vérifier si l'utilisateur a déjà liké ce message
+                    if (daoLike.isAlreadyLike(idMessage, username)) {
+                        daoLike.delete(like); // Supprime le like
+                    } else {
+                        daoLike.create(like); // Ajoute le like
+                    }
+                    vue = "thread?action=open&id=" + idThread;
+                } catch (NumberFormatException exception) {
+                    req.setAttribute("error", "Ne changez pas l'URL vous-même !");
+                    vue = "/WEB-INF/error.jsp";
+                }
+                break;
             default:
                 vue = "";
         }
diff --git a/WEB-INF/src/modele/dao/DaoLike.java b/WEB-INF/src/modele/dao/DaoLike.java
new file mode 100644
index 0000000000000000000000000000000000000000..5458d23523be457df60b5ecd87f5c1f5cdd5f028
--- /dev/null
+++ b/WEB-INF/src/modele/dao/DaoLike.java
@@ -0,0 +1,100 @@
+package modele.dao;
+
+import modele.dto.Like;
+import utils.DS;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+public class DaoLike {
+
+    public List<Like> findAll() {
+        DS bdd = DS.getInstance();
+        List<Like> likes = new ArrayList<>();
+        try (Connection con = bdd.getConnection()) {
+            PreparedStatement ps = con.prepareStatement("SELECT * FROM likes");
+            ResultSet rs = ps.executeQuery();
+            while (rs.next()) {
+                likes.add(new Like(rs.getString("username"), rs.getInt("id_message")));
+            }
+        } catch (SQLException e) {
+            throw new RuntimeException(e);
+        }
+        return likes;
+    }
+
+    public void create(Like like) {
+        DS bdd = DS.getInstance();
+        try (Connection con = bdd.getConnection()) {
+            PreparedStatement ps = con.prepareStatement("INSERT INTO likes VALUES (?, ?)");
+            ps.setString(1, like.getUsername());
+            ps.setInt(2, like.getIdMessage());
+            ps.executeUpdate();
+        } catch (SQLException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public void delete(Like like) {
+        DS bdd = DS.getInstance();
+        try (Connection con = bdd.getConnection()) {
+            PreparedStatement ps = con.prepareStatement("DELETE FROM likes WHERE username=? AND id_message=?");
+            ps.setString(1, like.getUsername());
+            ps.setInt(2, like.getIdMessage());
+            ps.executeUpdate();
+        } catch (SQLException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public int countLikesByMessage(int idMessage) {
+        DS bdd = DS.getInstance();
+        int count = 0;
+        try (Connection con = bdd.getConnection()) {
+            PreparedStatement ps = con.prepareStatement("SELECT COUNT(*) AS like_count FROM likes WHERE id_message = ?");
+            ps.setInt(1, idMessage);
+            ResultSet rs = ps.executeQuery();
+            if (rs.next()) {
+                count = rs.getInt("like_count");
+            }
+        } catch (SQLException e) {
+            throw new RuntimeException(e);
+        }
+        return count;
+    }
+
+    public List<Like> findByUser(String username) {
+        DS bdd = DS.getInstance();
+        List<Like> likes = new ArrayList<>();
+        try (Connection con = bdd.getConnection()) {
+            PreparedStatement ps = con.prepareStatement("SELECT * FROM likes WHERE username = ?");
+            ps.setString(1, username);
+            ResultSet rs = ps.executeQuery();
+            while (rs.next()) {
+                likes.add(new Like(rs.getString("username"), rs.getInt("id_message")));
+            }
+        } catch (SQLException e) {
+            throw new RuntimeException(e);
+        }
+        return likes;
+    }
+
+    public boolean isAlreadyLike(int idMessage, String username){
+        DS bdd = DS.getInstance();
+        boolean res = false;
+        try (Connection con = bdd.getConnection()) {
+            PreparedStatement ps = con.prepareStatement("SELECT * FROM likes WHERE id_message = ? AND username = ?");
+            ps.setInt(1, idMessage);
+            ps.setString(2, username);
+            ResultSet rs = ps.executeQuery();
+            res = rs.next();
+        } catch (SQLException e) {
+            throw new RuntimeException(e);
+        }
+        return res;
+    }
+}
diff --git a/WEB-INF/src/modele/dto/Like.java b/WEB-INF/src/modele/dto/Like.java
new file mode 100644
index 0000000000000000000000000000000000000000..e2779757b5687c046ed7259a60718c9b7cd11b88
--- /dev/null
+++ b/WEB-INF/src/modele/dto/Like.java
@@ -0,0 +1,27 @@
+package modele.dto;
+
+public class Like {
+    private String username;
+    private int idMessage;
+
+    public Like(String username, int idMessage) {
+        this.username = username;
+        this.idMessage = idMessage;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public int getIdMessage() {
+        return idMessage;
+    }
+
+    public void setIdMessage(int idMessage) {
+        this.idMessage = idMessage;
+    }
+}
diff --git a/WEB-INF/vue/chat.jsp b/WEB-INF/vue/chat.jsp
index f9f2545c0c11d0e86812fd933e1922700ceb5618..30c35571f4cdafa51e8117769943b98b1c324517 100644
--- a/WEB-INF/vue/chat.jsp
+++ b/WEB-INF/vue/chat.jsp
@@ -6,6 +6,7 @@
 <%@ page import="modele.dao.DaoMessage" %>
 <%@ page import="modele.dto.Message" %>
 <%@ page import="modele.dao.DaoFollower" %>
+<%@ page import="modele.dao.DaoLike" %>
 <%@ page import="java.lang.Integer" %>
 <%@ page import="java.lang.NumberFormatException" %>
 <%@ page import="java.util.List" %>
@@ -15,6 +16,7 @@
     DaoUser daoUser = new DaoUser();
     DaoMessage daoMessage = new DaoMessage();
     DaoFollower daoFollower = new DaoFollower();
+    DaoLike daoLike = new DaoLike();
 %>
 
 <%
@@ -82,35 +84,36 @@
 
                 <div id="messages" class="container-lg" style="margin-top: 60px; margin-bottom: 85px;">
 
-                    <% for (Message message : messages) { %>
+                    <% for (Message message : messages) {
+                        String sender;
+                        String color;
+                        boolean userIsSender = message.getSender().equals(user.getUsername());
+                        if (userIsSender) {
+                            sender = "vous";
+                            color = "primary";
+                        } else {
+                            sender = message.getSender();
+                            color = "secondary";
+                        } %>
 
-                    <% if (message.getSender().equals(user.getUsername())) {%>
-
-                    <div id="me" class="row d-inline-block m-3">
-                        <label class="ms-3 fs-6 text-secondary">par vous, le <%=message.getTime()%> à XXhXX</label>
-                        <div class="p-3 border border-3 border-primary rounded-pill bg-primary-subtle">
-                            <label><%=message.getMessage() %></label>
+                        <div id="me" class="row d-inline-block m-3">
+                            <label class="ms-3 fs-6 text-secondary">par <%=sender %>, le <%=message.getTime()%> à XXhXX</label>
+                            <div class="p-3 border border-3 border-<%=color %> rounded-pill bg-<%=color %>-subtle">
+                                <label><%=message.getMessage() %></label>
+                            </div>
+                            <a href="message?action=like&message=<%=message.getId_message()%>&thread=<%=id%>">
+                                like
+                            </a>
+                            nombre de like : <%=daoLike.countLikesByMessage(message.getId_message())%>
                         </div>
-                    </div>
-                    <br>
-
-                    <% } else { %>
-
-                    <div class="row d-inline-block m-3">
-                        <label class="ms-3 fs-6 text-secondary">par <%=message.getSender() %>, le <%=message.getTime()%> à XXhXX</label>
-                        <div class="p-3 border border-3 border-secondary rounded-pill bg-secondary-subtle">
-                            <label><%=message.getMessage() %></label>
-                        </div>
-                    </div>
-                    <br>
-
-                    <% } } %>
+                        <br>
+                    <% } %>
                 <div id="input" class="fixed-bottom p-2 bg-white border-top border-2 border-dark">
                     <form class="input-group mb-3 container-lg" method="post" action="message?action=send&thread=<%=id%>">
                         <a class="input-group-text link-primary" href="thread?action=open&id=<%=id %>">
                             <i class="bi-arrow-clockwise"></i>
                         </a>
-                        <input name="message" class="form-control" value="Entrez votre message ici.">
+                        <input name="message" class="form-control" placeholder="Entrez votre message ici.">
                         <input type="submit" class="input-group-text" value="Envoyer">
                     </form>
                 </div>
diff --git a/baseDeDonnee/init.sql b/baseDeDonnee/init.sql
index 175faf8abe9926548bac805ac1545ab4d684dbe5..70afc21cf52e6576da8c13f855f970c78a1edcc7 100644
--- a/baseDeDonnee/init.sql
+++ b/baseDeDonnee/init.sql
@@ -1,3 +1,4 @@
+DROP TABLE IF EXISTS likes;
 DROP TABLE IF EXISTS followers;
 DROP TABLE IF EXISTS messages;
 DROP TABLE IF EXISTS threads;
@@ -39,3 +40,11 @@ CREATE TABLE messages (
     FOREIGN KEY (id_thread) REFERENCES threads(id_thread) ON DELETE CASCADE
 );
 
+CREATE TABLE likes (
+    username   VARCHAR(24),
+    id_message INT,
+
+    PRIMARY KEY (username, id_message),
+    FOREIGN KEY (username) REFERENCES users(username) ON DELETE CASCADE,
+    FOREIGN KEY (id_message) REFERENCES messages(id_message) ON DELETE CASCADE
+);
\ No newline at end of file
diff --git a/baseDeDonnee/setup.sql b/baseDeDonnee/setup.sql
index 695320243faca54af27894e5582d2dc1c5148139..0cc1c037dd1cf83c63ceb1b3c575f29d4eec461b 100644
--- a/baseDeDonnee/setup.sql
+++ b/baseDeDonnee/setup.sql
@@ -66,3 +66,37 @@ INSERT INTO messages (sender, id_thread, message, time) VALUES
     ('julien', 6, 'Qui vient à la soirée vendredi soir ?', '2023-11-26 18:00:00 +1:00'),
     ('florine', 6, 'Moi ! Ça commence à quelle heure ?', '2023-11-26 18:10:00 +1:00'),
     ('baptiste', 6, 'Je ramène des pizzas 🍕', '2023-11-26 18:15:00 +1:00');
+
+-- Ajout de likes aux messages
+INSERT INTO likes VALUES
+    -- Likes sur "Kakou Kakou"
+    ('florine', 1),
+    ('baptiste', 1),
+    ('lea', 1),
+    ('julien', 2),
+
+    -- Likes sur "Banane Fromage Chips"
+    ('nath', 4),
+    ('baptiste', 4),
+    ('maxime', 5),
+
+    -- Likes sur "Polybius67"
+    ('julien', 6),
+    ('florine', 6),
+    ('maxime', 7),
+
+    -- Likes sur "Développement Web"
+    ('nath', 8),
+    ('julien', 8),
+    ('florine', 9),
+
+    -- Likes sur "Les Memes de l'IUT"
+    ('maxime', 10),
+    ('nath', 10),
+    ('baptiste', 11),
+
+    -- Likes sur "Soirée Étudiante"
+    ('lea', 12),
+    ('baptiste', 12),
+    ('maxime', 13),
+    ('florine', 14);