💡 Envie de vous mettre à PHP Orienté Objet ? En savoir plus...

Tuto PHP - Système de likes et dislikes

PrimFX PrimFX

On implémente un petit système de boutons "J'aime" / "Je n'aime pas" sur nos articles en PHP ! Bien sûr, il est tout à fait possible d'utiliser ce système sur d'autres types de posts (images, commentaires, etc.) pour laisser aux utilisateurs la possibilité d'exprimer leur avis ☺
  • article.php
<?php
$bdd = new PDO("mysql:host=127.0.0.1;dbname=articles;charset=utf8", "root", "");
if(isset($_GET['id']) AND !empty($_GET['id'])) {
   $get_id = htmlspecialchars($_GET['id']);
   $article = $bdd->prepare('SELECT * FROM articles WHERE id = ?');
   $article->execute(array($get_id));
   if($article->rowCount() == 1) {
      $article = $article->fetch();
      $id = $article['id'];
      $titre = $article['titre'];
      $contenu = $article['contenu'];
      $likes = $bdd->prepare('SELECT id FROM likes WHERE id_article = ?');
      $likes->execute(array($id));
      $likes = $likes->rowCount();
      $dislikes = $bdd->prepare('SELECT id FROM dislikes WHERE id_article = ?');
      $dislikes->execute(array($id));
      $dislikes = $dislikes->rowCount();
   } else {
      die('Cet article n\'existe pas !');
   }
} else {
   die('Erreur');
}
?>
<!DOCTYPE html>
<html>
<head>
   <title>Accueil</title>
   <meta charset="utf-8">
</head>
<body>
   <img src="miniatures/<?= $id ?>.jpg" width="400" />
   <h1><?= $titre ?></h1>
   <p><?= $contenu ?></p>
   <a href="php/action.php?t=1&id=<?= $id ?>">J'aime</a> (<?= $likes ?>)
   <br />
   <a href="php/action.php?t=2&id=<?= $id ?>">Je n'aime pas</a> (<?= $dislikes ?>) 
</body>
</html>
  • php/action.php
<?php
$bdd = new PDO("mysql:host=127.0.0.1;dbname=articles;charset=utf8", "root", "");
if(isset($_GET['t'],$_GET['id']) AND !empty($_GET['t']) AND !empty($_GET['id'])) {
   $getid = (int) $_GET['id'];
   $gett = (int) $_GET['t'];
   $sessionid = 5;
   $check = $bdd->prepare('SELECT id FROM articles WHERE id = ?');
   $check->execute(array($getid));
   if($check->rowCount() == 1) {
      if($gett == 1) {
         $check_like = $bdd->prepare('SELECT id FROM likes WHERE id_article = ? AND id_membre = ?');
         $check_like->execute(array($getid,$sessionid));
         $del = $bdd->prepare('DELETE FROM dislikes WHERE id_article = ? AND id_membre = ?');
         $del->execute(array($getid,$sessionid));
         if($check_like->rowCount() == 1) {
            $del = $bdd->prepare('DELETE FROM likes WHERE id_article = ? AND id_membre = ?');
            $del->execute(array($getid,$sessionid));
         } else {
            $ins = $bdd->prepare('INSERT INTO likes (id_article, id_membre) VALUES (?, ?)');
            $ins->execute(array($getid, $sessionid));
         }
         
      } elseif($gett == 2) {
         $check_like = $bdd->prepare('SELECT id FROM dislikes WHERE id_article = ? AND id_membre = ?');
         $check_like->execute(array($getid,$sessionid));
         $del = $bdd->prepare('DELETE FROM likes WHERE id_article = ? AND id_membre = ?');
         $del->execute(array($getid,$sessionid));
         if($check_like->rowCount() == 1) {
            $del = $bdd->prepare('DELETE FROM dislikes WHERE id_article = ? AND id_membre = ?');
            $del->execute(array($getid,$sessionid));
         } else {
            $ins = $bdd->prepare('INSERT INTO dislikes (id_article, id_membre) VALUES (?, ?)');
            $ins->execute(array($getid, $sessionid));
         }
      }
      header('Location: http://127.0.0.1/Tutos_PHP/Articles/article.php?id='.$getid);
   } else {
      exit('Erreur fatale. <a href="http://127.0.0.1/Tutos_PHP/Articles/">Revenir à l\'accueil</a>');
   }
} else {
   exit('Erreur fatale. <a href="http://127.0.0.1/Tutos_PHP/Articles/">Revenir à l\'accueil</a>');
}

Votre commentaire

Vous devez être connecté pour poster un commentaire. Se connecter ou Créer un compte

Commentaires 7

  • Moilee Le 28 mars, à 06:20 | Répondre

    Bjr , j'ai réécrit votre sur un système de like d'une photo quand un membre est connecté, donc j'ai ds les deux table (likes et dislikes) ,id,et id_membre, le id_membre récupère le id passer en paramètre par la page connexion, et tout marche ,sauf que je n'arrive pas a afficher tout les likes où dislikes de la base, je crois que ma requête que j'ai eu de vous a peut être une erreur ($likes =$bdd->prepare ('SELECT id FROM likes WHERE id_membre=?');
    $likes->execute(array($getid));
    $likes=$likes->rowCount();
    ) Quand un user est connecté il peut aimé ou pas , mais lorsque je me connecte avec un autre compte je ne vois pas son like ou dislikes, Merci de m'aider

  • ZOZI Le 5 mars, à 22:08 | Répondre

    Bonsoir ! il m'affiche Erreur ! c'est quoi le problème s'ils vous plait

  • ZOZI Le 5 mars, à 21:46 | Répondre

    Bonsoir ! il m'affiche Erreur ! c'est quoi le problème s'ils vous plait

  • batman Le 14 mars, à 02:41 | Répondre

    Bonsoir ! il m'affiche Erreur ! c'est quoi le problème s'ils vous plait

  • manu Le 6 novembre, à 17:09 | Répondre

    Merci pour ce tuto très bien construit et comme d'habitude très bien expliqué.
    Pour aller plus loin serait-il possible de passer les infos en ajax à la façon de youtube ?
    Pour les textes pas de problème, mais le rechargement de la page interrompt les vidéos.
    Merci

  • samlaouni Le 25 septembre, à 10:18 | Répondre

    Merci pour les tutos frere et bon courage pour la suite

  • Ades03 Le 23 septembre, à 20:46 | Répondre

    À quand le tuto JS :D