Veuillez vous connecter ou créer un compte pour suivre ce topic
Ce topic est suivi par: ets_raphael
Auteur Sujet: Problème fonction like

ets_raphael

Messages: 13

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 :/ 
Publicité

Zbuu

Messages: 134

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 Sourire 

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 Clin d'oeil 
Attention ! c'est juste un exemple, je n'ai pas vu le tutoriel Clin d'oeil 

ets_raphael

Messages: 13

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

Messages: 134

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

ets_raphael

Messages: 13

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 Sourire 

Zbuu

Messages: 134

outch, c'est un sacré paquet Bouche bée la balise code fonctionne pourtant bien chez moi Clin d'oeil 

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

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é Grand sourire 

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

ets_raphael

Messages: 13

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

Messages: 13

<?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 :( 


Veuillez vous connecter ou créer un compte pour poster une réponse