parsimonhi a écrit :
Bonjour,
Il faut d'abord faire marcher like.php
Est-ce que tu sais te servir de phpMyAdmin ?
Est-ce que la base est bien mise à jour comme espéré quand on clique sur le bouton "j'aime" ? (on le vérifie en allant regarder dans la table correspondante avec phpMyAdmin)
Amicalement,
Bonjour,
Oui je me sers très bien de phpMyAdmin.
j'ai ajouté une contrainte d'unicité : ALTER TABLE Likes ADD CONSTRAINT unique_like UNIQUE (post_id, user_id);
En réfléchissant je viens de voir que dans mon code like.php il y avait une accolade en trop qui faussait tous le code !!!!!!
Donc maintenant, ma table likes s'incrémente qu'une fois
Quand je recharge la page, l'utilisateur ayant déjà liké un post ne peut plus le reliker
! Cependant, avant que la page se recharge il peut incrémenter autant qu'il veut
Dois-je d'ailleurs rajouter un refresh de la page quelque part ? Dans listpost.php ? like.php ? ou dans le javascript ?
Un autre utilisateur peut appuyer sur le bouton j'aime mais son like n'est pas additionné avec l'ancien nombre
Mon code "d'intérêt" dans listpost.php :
// Requête pour récupérer les posts, le nombre de likes pour chaque post, et le pseudo de l'utilisateur qui a posté
$data_post = 'SELECT Post.*, Utilisateur.pseudo, COUNT(Likes.post_id) as likes_count FROM Post
INNER JOIN Utilisateur ON Post.user_id=Utilisateur.user_id
LEFT JOIN Likes ON Post.post_id = Likes.post_id
GROUP BY Post.post_id
ORDER BY date DESC';
while ($dbRow = mysqli_fetch_assoc($dbResult)) {
$post_id = $dbRow['post_id'];
$likes_count = $dbRow['likes_count'];
$has_liked = false; // Initialisation
// Vérifie si l'utilisateur a aimé ce post
if ($loggedIn) {
$user_id = $_SESSION['user_id'];
$like_query = "SELECT COUNT(*) AS count FROM Likes WHERE post_id=$post_id AND user_id=$user_id";
$like_result = mysqli_query($dbLink, $like_query);
$like_row = mysqli_fetch_assoc($like_result);
$has_liked = ($like_row['count'] > 0);
}
while ($dbRow = mysqli_fetch_assoc($dbResult)) {
$post_id = $dbRow['post_id'];
$likes_count = $dbRow['likes_count'];
$has_liked = false; // Initialisation
// Vérifie si l'utilisateur a aimé ce post
if ($loggedIn) {
$user_id = $_SESSION['user_id'];
$like_query = "SELECT COUNT(*) AS count FROM Likes WHERE post_id=$post_id AND user_id=$user_id";
$like_result = mysqli_query($dbLink, $like_query);
$like_row = mysqli_fetch_assoc($like_result);
$has_liked = ($like_row['count'] > 0);
}
mon code like.php :
<?php
require_once('config.php');
session_start();
if(isset($_POST['post_id'])) {
$postId = $_POST['post_id'];
// Connexion à la BD
$dbLink = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME)
or die('Erreur de connexion au serveur : ' . mysqli_connect_error());
// Sélection de la base de données
mysqli_select_db($dbLink, DB_NAME)
or die('Erreur dans la sélection de la base : ' . mysqli_error($dbLink));
// Vérifie si l'utilisateur a déjà liké ce post
$query = "SELECT COUNT(*) FROM Likes WHERE post_id = $postId";
$result = mysqli_query($dbLink, $query);
// On vérifie si l'utilisateur est connecté
if (isset($_SESSION['user_id'])){
$loggedIn = $_SESSION['user_id'];
}
else{
$loggedIn = false;
}
if ($loggedIn && mysqli_fetch_array($result)[0] == 0){
// Ajoute une entrée dans la table Likes pour enregistrer que l'utilisateur a liké ce post
$query = "INSERT INTO Likes (post_id, user_id) VALUES ($postId, {$_SESSION['user_id']})";
mysqli_query($dbLink, $query);
Mon code JS jaime.js :
$(document).ready(function() {
// Ajoute un événement "click" sur chaque bouton "J'aime"
$('.like-button').click(function() {
var postId = $(this).data('post-id');
var likesSpan = $(this).siblings().first();
// Envoie une requête AJAX pour incrémenter le nombre de likes
$.ajax({
type: 'POST',
url: 'like.php',
data: {post_id: postId},
success: function() {
// Met à jour l'affichage avec le nouveau nombre de likes
var likesCount = parseInt(likesSpan.text().split(' ')[0]) + 1; //on regarde le texte qui est dans le span,
// on le divise en plusieurs éléments en prenant un espace comme séparateur,
// et enfin on prend le premier élément trouvé pour lui ajouter 1.
likesSpan.text(likesCount + ' j\'aime');
}
});
});
});
Merci,
Modifié par linab (27 Apr 2023 - 12:30)