IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

Afficher un contenu selon son ID


Sujet :

AJAX

  1. #1
    Candidat au Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2017
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Afficher un contenu selon son ID
    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 :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    // 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // 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';
    }

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    et bienvenu sur DVP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                    	$('.msg-alert').html(data);
    Là, en effet, tu affectes tous les messages.

    Il faut utiliser $this pour cibler CE message en particulier.

    Du genre (à tester) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                    	$this.closest('.msg-alert').html(data); // (le plus proche)

  3. #3
    Candidat au Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2017
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bonjour @jreaux62,

    Merci pour cette réponse rapide !
    Je vais tester mon code avec la fonction closest() pour voir ce que ça donne.

    Je reviendrai vers vous.

    Merci encore !

  4. #4
    Candidat au Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2017
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Avec cette méthode ça ne marche.
    J'ai le message qui s'affiche dans la console mais il ne s'affiche pas sur l'interface.

    Et la méthode closest() retourne l'élément parent. Hors dans mon cas c'est l'élément sur lequel on a cliqué que je cherche mais pas son parent.

    Cdlt,

  5. #5
    Candidat au Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2017
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    J'ai corrigé le problème en modifiant mon code de cette façon :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    div id="message_<?=$row['question_id'];?>" style="display:none;">Merci du signalement</div>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // et dans le code js je fais ceci :
    $("#message_"+obj).html(data);
    Cdlt,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] Afficher un contenu selon choix de liste déroulante
    Par GroFlo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/01/2013, 19h30
  2. afficher le contenu selon le Menu
    Par laure07 dans le forum Langage
    Réponses: 4
    Dernier message: 30/09/2010, 00h54
  3. [MySQL] Afficher le contenu d'une table MYSQL selon un critère bien défini
    Par Webnadou dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 28/09/2007, 22h38
  4. [GTK#]Comment afficher une frame et son contenu?
    Par mick2d dans le forum GTK+
    Réponses: 3
    Dernier message: 31/03/2006, 10h35
  5. Réponses: 1
    Dernier message: 07/09/2005, 11h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo