Problème fonction like

ets_raphael

ets_raphael Le 15 juillet 2017 à 05:29 (Édité le 25 janvier 2019 à 17:53)

Bonjour, 

Moi j'ai un souci avec ma fonction like ( dislike aussi en passant ). Je me suis aidé de la video de primFX (https://www.primfx.com/article/tuto-php-systeme-likes-dislikes-471), mais à l'inverse de lui j'aimerais juste que mes boutons likes et dislikes se retrouvent juste sur la page article a coté de supprimer ou modifié. 

Mes boutons jusqu'a maintenant marche bien mais le problème est juste que quand j'aime une photo, c'est tout les autres articles aussi sont aimées ( pareil pour le dislike ). Je pense que c'est parce que l'id n'est pas pris en compte c'est pour ca qu'il le mets par défaut l'id 1. Pour plus de compréhension je vous montre tout ca. 

  if(isset($_GET['id']) AND !empty($_GET['id'])) {
La suite ( modifié a ma manière ) : 

  <div class="col-sm-14">
J'ai supprimé toute les choses inutiles.. Merci a ceux qui m'aideront parce que ca fait 2 jours que je lutte et que je comprends pas :/ 
Zbuu

Zbuu Le 15 juillet 2017 à 09:21

Bonjour 

mais le problème est juste que quand j'aime une photo, c'est tout les autres articles aussi sont aimées ( pareil pour le dislike ). Je pense que c'est parce que l'id n'est pas pris en compte c'est pour ca qu'il le mets par défaut l'id 1.
Hum, sans avoir de code, je dirais plutôt que tu oublié ou mal renseigné le paramètre where dans ta requête 😀 

Lorsque que tu mets a jours ton articles tu devrais avoir une requête du style : 
$q = $db->prepare("UPDATE articles SET likes = likes + 1 WHERE id = :article_id");
$q->execute([
   ':article_id' => $_GET['id']
]);
Vérifie bien ton where 😉 
Attention ! c'est juste un exemple, je n'ai pas vu le tutoriel 😉 
ets_raphael

ets_raphael Le 16 juillet 2017 à 00:01

Hummmm.. J'aurais bien aimé utilisé cette solution sauf que dans le cas du tuto la table des j'aime et la tables des articles sont séparé :/ 
Zbuu

Zbuu Le 16 juillet 2017 à 02:54

Montre ton code et ta structure de base de donnée stp 
ets_raphael

ets_raphael Le 16 juillet 2017 à 03:33

Celui la c'est mes requêtes : 

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

Et la suite c'est comment je les affiches : 

          <div class="col-sm-14">
            <div>
              <?php while($a = $articles->fetch()) { ?>
                <div>
                  <div>
                    <a href="#" >
                      <img class="card-img-top" src="miniatures/<?= $a['id']?>.jpg">
                    </a>
                    <div>
                      <figure>
                        <img src="membres/avatars/<?php echo $a['avatar'];?>" class="profile-avatar" alt="">
                      </figure>
                      <h4 class="card-title mt-3"><?= $a['titre']?></h4>
                      <a href="redaction.php?edit=<?= $a['id'] ?>">Modifier</a> |
                      <a href="supprimer.php?id=<?= $a['id'] ?>">Supprimer</a>
                      <a href="action.php?t=1&id=<?= $id ?>" data-toggle="tooltip" data-placement="left" title="Comments"><i class="fa fa-heart" ></i> <?= $likes ?></a>
                      <a href="action.php?t=2&id=<?= $id ?>" data-toggle="tooltip" data-placement="right" title="Loved"><i class="fa fa-comments"></i> <?= $dislikes ?></a>
                    </div>
                  </div>
                </div>
                <?php } ?>
              </div>
            </div>
Puis pour mes tables, celui des likes c'est : 

CREATE TABLE `likes` (
  `id` int(11) NOT NULL,
  `id_article` int(11) NOT NULL,
  `id_membre` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Et celui des articles c'est : 

CREATE TABLE `likes` (
  `id` int(11) NOT NULL,
  `id_article` int(11) NOT NULL,
  `id_membre` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Désolé de toute envoyé comme ca mais si j'essaie de mettre en code tu ne recevra qu'une seule ligne :/ 
Merci a toi de m'aider 😀 
Zbuu

Zbuu Le 16 juillet 2017 à 04:57

outch, c'est un sacré paquet 😮 la balise code fonctionne pourtant bien chez moi 😉 

Par contre soit j'ai pas bien compris ton problème ou alors tu ne ma pas donné tout le code 😄 

Mes boutons jusqu'a maintenant marche bien mais le problème est juste que quand j'aime une photo, c'est tout les autres articles aussi sont aimées ( pareil pour le dislike )
Tu dis avoir un problème au moment ou tu likes/dislikes une photo mais dans ton code je ne vois que des select, il n'y aucun insert ou bien même update, possible d'avoir le reste ? Et si la balise code déconne essaye de posté sur pastebin c'est mieux qu'un gros pathé 😄 

Après je comprends pas trop l'utilité d'avoir 2 tables (likes et dislikes) alors qu'une seule pourrait suffir 😉 
ets_raphael

ets_raphael Le 16 juillet 2017 à 18:38

<?php$bdd = new PDO('mysql:host=localhost;dbname=espace_membre', 'root', '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://localhost:8888/TestePostePhoto.php?id=1');} else {   exit('Erreur fatale. <a href="Connexion.php">Revenir à l\'accueil</a>');}} else {exit('Erreur fatale. <a href="Connexion.php">Revenir à l\'accueil</a>');}
 Le reste du code est là mais je te l'ai pas donnée parce que je pense que l'erreur  ne se situe pas ici :( 
ets_raphael

ets_raphael Le 16 juillet 2017 à 18:41

<?php
$bdd = new PDO('mysql:host=localhost;dbname=espace_membre', 'root', '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://localhost:8888/TestePostePhoto.php?id=1');}
else {   exit('Erreur fatale. <a href="Connexion.php">Revenir à l\'accueil</a>');}}
else {exit('Erreur fatale. <a href="Connexion.php">Revenir à l\'accueil</a>');}



 Le reste du code est là mais je te l'ai pas donnée parce que je pense que l'erreur  ne se situe pas ici :(
J'ai rajouté des espaces deja que le codes ne marche pas sur mon ordi :( 
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte