Bonjour,
J'ai suivie le tuto like/dislike de Grafikart tout fonctionne bien sauf que moi j'appelle plusieurs fois le systeme de like sur la même page du coup j'ai que 1 sur 3 des systeme de like qui fonctionne
j'aimerais savoir comment je pourais faire pour que les 3 systeme de like fonctionne sur la même page
Merci d'avance
Cordialement ToutPax
Enfait le code est exactement le même que dans le tuto c'est juste que moi j'ai un systeme de post
l'utilisateur peut avoir plusieurs posts et j'affiche tout ces posts avec un foreach et dans le foreach il y a le systeme de like donc si j'ai un post le systeme de like fonctionne mais si j'ai 2 ou plus le systeme de like fonctionne que sur le dernier post
Enfait le code est exactement le même que dans le tuto c'est juste que moi j'ai un systeme de post
Oui mais nous ne connaissons pas le code par coeur
si j'ai un post le systeme de like fonctionne mais si j'ai 2 ou plus le systeme de like fonctionne que sur le dernier post
As-tu pensé a modifier les attributs id pour chaque élément dans ton foreach ?
Alors dans mon foreach j'ai l'affiche du post et juste en dessous j'ai sa
<?php
$vote = false;
if(isset($_SESSION['user_id'])){
$req = $db->prepare("SELECT * FROM votes WHERE ref = ? AND ref_id = ? AND user_id = ?");
$req->execute(['microposts', $micropost->id, $_SESSION['user_id']]);
$vote = $req->fetch(PDO::FETCH_OBJ);
}
?>
<div style="margin: -30px 0;" class="vote <?= Vote::getClass($vote) ?>" id="vote" data-ref="microposts" data-ref_id="<?= $micropost->id ?>" data-user_id="<?= $_SESSION['user_id'] ?>">
<div class="vote_bar">
<div class="vote_progress" style="width: <?= ($micropost->like_count + $micropost->dislike_count) == 0 ? 100 : round(100 * ($micropost->like_count / ($micropost->like_count + $micropost->dislike_count))); ?>%;"></div>
</div>
<div class="vote_loading">
Chargement...
</div>
<div class="vote_btns">
<button class="vote_btn vote_like"><i class="fa fa-thumbs-up"></i> <span id="like_count"><?= $micropost->like_count ?></span></button>
<button class="vote_btn vote_dislike"><i class="fa fa-thumbs-down"></i> <span id="dislike_count"><?= $micropost->dislike_count ?></span></button>
</div>
</div>
sur tout les post j'ai le bonne id je pense qu'il faudrait modifier le js mais je ne sait pas quoi parsque si j'ai que 1 post je like dislike sans probleme alors que si j'ai plus de 1 post je pourrais liker et disliker que le dernier post
voici mon js
$(document).ready(function(){
var $vote = $('#vote');
$('.vote_like', $vote).click(function(e){
e.preventDefault();
vote(1);
});
$('.vote_dislike', $vote).click(function(e){
e.preventDefault();
vote(-1);
});
function vote(value){
$('.vote_loading').show();
$('.vote_btns').hide();
$.post('like_micropost.php', {
ref: $vote.data('ref'),
ref_id: $vote.data('ref_id'),
user_id: $vote.data('user_id'),
vote:value
}).done(function(data, textStatus, jqXHR){
$('#dislike_count').text(data.dislike_count);
$('#like_count').text(data.like_count);
$vote.removeClass('is_liked is_disliked');
if(data.success){
if(value == 1){
$vote.addClass('is_liked');
}else{
$vote.addClass('is_disliked');
}
}
var percentage = Math.round(100 * (data.like_count / (parseInt(data.dislike_count) + parseInt(data.like_count))));
$('.vote_progress').css('width', percentage + '%');
}).fail(function(jqXHR, textStatus, errorThrown){
alert(jqXHR.responseText);
}).always(function(){
$('.vote_loading').hide();
$('.vote_btns').fadeIn();
});
}
});
Dans ton Js tu sélectionne les id vote, like_count et dislike_count. Un Id doit être unique alors que dans ton code les ids ont tous la même valeur.
Modifier les pour faire en sorte qu'ils soient différents en incrémentant par exemple avec l'id du post
Tu as modifier les ids dans ton foreach ?
Exemple :
<div " id="vote">
Par :
<div " id="vote-<?= $micropost->id ?>">
Tu fais pareil pour l'id like_count et dislike_count ça devrait marché non ?
J'ai modifier au niveau de php mais sa fonctionne pas il
faut modifier quelque chose dans le js ?!
Modifier dans un premier temps ça
<div " id="vote-<?= $micropost->id ?>">
Par
<div " id="vote-<?= $micropost->id ?>">