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

Ce que je veux

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

13 réponses


Mehdikacim
Réponse acceptée

As-tu TeamViewer pour déboguer ton code ?

Puis-je voir ton code ?

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

Comment dois-je mis prendre pour le js ??

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 ?>">

j'ai dèjà modifier l'id vote idem pour l'id like_count et l'id dislike_count

oui mon : identifiant xxx xxx xxx et le code : xxxxx

Dans 5 minutes, je le réinstalle :)
Edit: Impossible de te joindre