8722 sujets

Développement web côté serveur, CMS

Bonjour,

Je suis coincé sur un système "signaler un contenu" et depuis lors je cherche mais je n'arrive pas à trouver à ce problème.
En effet, j'aimerais mettre un lien pour permettre de signaler un contenu (ex : article, question, réponse). Quand un utilisateur vient cliquer sur ce lien qu'il enregistre le clic dans la base de données et ensuite le lien est remplacé par un message. Je fais une boucle qui affiche par exemple 10 contenus (questions). Chaque question est identifiée par son attribut (id). Mon problème est que je n'arrive pas à afficher mon message après le clic sur uniquement la question concernée. Quand je clic mon message s'affiche sur toutes les questions. Est-ce que quelqu'un connait une solution à ce problème ? Je vous remercie.

Code ci-dessous :


session_start();
 
// Code SQL
//connexion db
include('db.php');
 
$question_id = $_GET['question_id'];
$user_id = $_SESSION['user_id'];
 
$q = array(':question_id'=>$question_id, ':user_id'=>$user_id);
$query = $db->prepare("SELECT * FROM question WHERE question_id = :question_id AND user_id = :$user_id";
$query->execute($q) or die(print_r($query->errorInfo()));
$rows = $query->fetchAll();
 
foreach($rows as $row) {
 
// Code HTML
<div class="contenu-question"
       <div class="msg-alert"></div>
 
       <div><?=$row['question_contenu'];?></div>
       <div class="signaler"><a href="index.php?question_id=<?=$row['question_id'];?>" id="<?=$row['question_id'];?>">Signaler cette question</a></div>
       <div class="message" style="display:none;">Merci du signalement</div>
</div>
 
}


// Code js
$(document).ready(function(){
    $('.signaler a').on('click', function(e) {
    	e.preventDefault();
 
    	var $this = $(this);
    	var obj = $this.attr('id');
 
         $.ajax({
            type:'GET',
            url:'signaler.php', 
            data:'question_id='+obj,
            success: function(data) {
            	if (data !== '') {       
                	$('.message').show();
                        $('.signaler').hide();
                } else {
                	$('.msg-alert').html(data);
                }	
            }
        });            
    });
});


// Code PHP
$q = array(':question_id'=>$question_id, ':user_id'=>$user_id);
$query = $db->prepare('SELECT count(*) AS nbr FROM signal WHERE question_id = :question_id, AND user_id = :user_id');
$query->execute($q) or die(print_r($query->errorInfo()));
$data = $query->fetch();
 
if (!$data['nbr']) {
    $q = array(':clic'=>'1', ':question_id'=>$question_id, ':user_id'=>$user_id);
    $query = $db->prepare('INSERT INTO signal (signal_clic, question_id, user_id) VALUES (:clic, :question_id, :user_id)');
    $query->execute($q) or die(print_r($query->errorInfo()));
} else {
    echo 'Vous avez déjà signaler cette question';
}
Bonjour,
Ce qui t'arrive est normal ... Quand tu écris: $('.message').show(), tu fais apparaître tous les élément ayant la classe "message."

Je pense que tu devrais identifier chaque message:

<div class="message" id="message_<?=$row['question_id'];?>" style="display:none;">Merci du signalement</div>
et ensuite, dans ton javascript, remplacer $('.message').show() par $("#message_" + obj).show();
Modifié par loicbcn (10 Jan 2017 - 09:03)
Bonjour,

Un grand merci pour cette réponse. J'ai corrigé et ça marche très bien.

A bientôt !

Cdlt,