Tuto PHP - Système de likes et dislikes


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>');
}

A propos de l'auteur

PrimFX
PrimFX

Salut tout le monde ! Je m'appelle Boris, j'ai 18 ans et je suis passionné d'informatique et de technologie. Je partage cette passion à travers mes vidéos que tu peux retrouver sur YouTube sous le nom de PrimFX ou bien sur ce site bien sûr (tutoriels de programmation (HTML, CSS, PHP), gameplays, vlogs high-tech...). @+

A voir aussi

8 Commentaires

POSTER UN COMMENTAIRE

Vous devez être connecté pour pouvoir poster un commentaire...

Pas encore de compte ? Créez-en un ici !



  • Photo de profil de Ades03

    Ades03

    23 September 2016 à 20:46

    À quand le tuto JS 😄

  • Photo de profil de samlaouni

    samlaouni

    25 September 2016 à 10:18

    Merci pour les tutos frere et bon courage pour la suite

  • Photo de profil de manu

    manu

    06 November 2016 à 17:09

    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

  • Photo de profil de batman

    batman

    14 March 2017 à 02:41

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

  • Photo de profil de ZOZI

    ZOZI

    05 March 2018 à 21:46

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

  • Photo de profil de ZOZI

    ZOZI

    05 March 2018 à 22:08

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

  • Photo de profil de Samet

    Samet

    20 January 2019 à 22:25

    Bonjour

    Pour ceux qui disent que ça affiche "erreur" veuillez verifier l'orthographe de la table article car moi c'était ça mon problème et maintenant ça fonctionne correctement. 

  • Photo de profil de Moilee

    Moilee

    28 March 2019 à 06:20

    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