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

jQuery Discussion :

Lien de recherche


Sujet :

jQuery

  1. #1
    Candidat au Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Octobre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Octobre 2018
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Lien de recherche
    Bonjour à tous,

    Je débute en jquery et j'ai créé une page qui permet de recenser des chansons, des auteurs, etc. et je voudrais que l'on puisse passer de l'un à l'autre via des liens.

    Tout fonctionne lors de la recherche initiale, mais lorsque je clique sur un lien de ma page chargée, il vide la div result et je dois recommencer une nouvelle recherche.

    Voilà le
    Code HTML : 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
    27
    28
    29
    30
    31
    32
    33
     
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
    <script type="text/javascript" src="script.js"></script>
    <div class="result">
      <table class="result">
        <tr class="result">
    	<th class="result" width="18%">Titre</th>
    	<th class="result" width="12%">Manifestation</th>
    	<th class="result" width="15%">Auteur</th>
    	<th class="result" width="15%">Compositeur</th>
    	<th class="result" width="15%">Interprète</th>
    	<th class="result" width="15%">Harmonisateur</th>
        </tr>
     
        <tr class="result2">
          <td class="result"><a class="titre" href="?17">Je suis un homme</a></td>
          <td class="result"><a class="event" href="?3">Soirée 2015</a><br></td>
          <td class="result"><a class="name" href="?18"> Zazie</a><br></td>
          <td class="result"><a class="name" href="?100">Jean-Pierre Pilot</a><br><a class="name" href="?159">Philippe Paradis</a><br></td>
          <td class="result"><a class="name" href="?18"> Zazie</a><br></td>
          <td class="result"><a class="name" href="?160">Christelle Servillat</a><br></td>
        </tr>
     
        <tr class="result2">
          <td class="result"><a class="titre" href="?31">Tout l or des hommes</a></td>
          <td class="result"><a class="event" href="?2">Soirée 2016</a><br></td>
          <td class="result"><a class="name" href="?80">Jacques Veneruso</a><br></td>
          <td class="result"><a class="name" href="?80">Jacques Veneruso</a><br></td>
          <td class="result"><a class="name" href="?79">Céline Dion</a><br></td>
          <td class="result"><a class="name" href="?42">Christian Roy</a><br></td>
       </tr>
    </table>
    </div>

    Et voilà mon
    Code JavaScript : 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
    $(document).ready(function(){
     
    	 $('.titre').click(function(){
     
    		var song = $(this).attr("href").substring(1, 4);
     
    	        $.post('songdetail.php', {song:song}, function(donnees){
    			$('.result').html(donnees); 
     
    	        });
    	        return false;
    	});
     
      	$('.name').click(function(){
     
    		var person = $(this).attr("href").substring(1, 4);
     
    	       $.post('person.php', {person:person}, function(donnees){
    			$('.result').html(donnees); 
     
    	       });
    	      return false;
    	});
    });

    En live c'est là : http://urlz.fr/83So

    Un grand merci d'avance pour votre soutien.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- pourquoi mets-tu la classe class="result" sur TOUTES les balises ??

    2- tu fais appel à un fichier person.php.
    Que contient-il ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $('.result').html(donnees);
    Où sont censées s'afficher les données reçues ?

    3- Ajax ne fonctionne pas avec des liens <a> (le lien <a> va "rafraichir" la page, ce qui n'est pas le but).
    Par contre, tu peux mettre un attribut data-* pour indiquer quel paramètre transmettre.

  3. #3
    Candidat au Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Octobre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Octobre 2018
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Merci pour la réponse.

    1- pourquoi mets-tu la classe class="result" sur TOUTES les balises ??
    Du copier-coller . C'est corrigé

    2- tu fais appel à un fichier person.php.
    Que contient-il ?
    C'est un fichier qui affiche les détails de la personne. Il s'ouvre grâce à la variable $_POST.

    Voilà la requête utilisée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $qry1 = "SELECT * FROM personne WHERE id = ".$_POST['person'];
    Où sont censées s'afficher les données reçues ?
    Tous les liens doivent s'afficher dans la même div. Je remplace simplement le contenu.

    3- Ajax ne fonctionne pas avec des liens <a> (le lien <a> va "rafraichir" la page, ce qui n'est pas le but).
    Par contre, tu peux mettre un attribut data-* pour indiquer quel paramètre transmettre.
    J'ai changé les liens en div avec le paramètre data-id. Ça fonctionne, mais lors du 2ème clic, le onclick semble ne plus fonctionner et je dois rafraîchir la page pour une nouvelle recherche. Est-ce que c'est lié au fait que tout s'affiche dans la même div ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    OK.

    C'est lié au fait.... que tu ne montres pas ton code.

    Et faire une réponse vague... ne risque pas de t'amener une solution précise.

    ...C'est un fichier qui affiche les détails de la personne...
    Bravo... mais ça ne dit pas quelles données ça renvoie.

    ...Tous les liens doivent s'afficher dans la même div...
    Super... laquelle ?

    ...J'ai changé les liens en div avec le paramètre data-id...
    Génial... on doit deviner ton code ?



    ...Ça fonctionne, mais lors du 2ème clic, le onclick semble ne plus fonctionner...
    Oui, je sais pourquoi... mais j'attends ton code pour confirmation.

  5. #5
    Candidat au Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Octobre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Octobre 2018
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    OK, alors je vais faire plus précis.

    J'ai un fichier index.php qui contient 2 div. 1 avec le formulaire de recherche et 1 avec le résultat de la recherche. Ensuite, toutes les autres pages se chargent dans cette div.

    Ça ne passe pas dans une balise code alors j'ai mis les fichiers en pièce jointe.

    Encore merci.
    Fichiers attachés Fichiers attachés

  6. #6
    Invité
    Invité(e)
    Par défaut
    On s'est mal compris...
    Il y a une marge entre "tout" et "rien"...

    1- On a juste besoin de voir le code nécessaire et suffisant.
    D'autant que j'ai ouvert tes fichiers : tu ne mets AUCUN commentaire ni explication du code...


    2- Bon.
    Je t'explique pourquoi ça ne marche pas la 2ème fois.

    Il faut que l'évènement soit "accroché" à un élément DEJA présent dans le DOM.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      	$('.name').click(function(){
    Si l'élément de classe "name" est ajouté dynamiquement (via JavaScript/Ajax), alors ça ne fonctionnera pas.

    Il faut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      	$('body').on('click', '.name', function(){
    Je mets 'body', mais le mieux est d'"accrocher" à l'élément présent le plus proche.
    Dernière modification par Invité ; 26/10/2018 à 17h32.

  7. #7
    Candidat au Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Octobre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Octobre 2018
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Alors voilà un bout du code de person.php. Il y a 4 tableaux identiques dans l'original, c'est juste la requête à la ligne 24 qui change et qui va chercher dans une autre table.

    Code html : 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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    <body>
      <br>
      <div class="titre">
    	<?php
            $qry1 = "SELECT * FROM personne WHERE id = ".$_POST['person'];
            $result = mysqli_query($connexion, $qry1);
            $ligne = mysqli_fetch_array($result);
              
            echo $ligne['nomfamille']." ".$ligne['prenom'];
            $text = $_POST['person'];
            ?>
      </div><br><br>
     
    	<?php
            $qrycountsoiree = "SELECT count(*) as nb FROM chanson WHERE id in (SELECT idchanson FROM interprete WHERE idpersonne = ".$text.")";
            $resultcountsoiree = mysqli_query($connexion, $qrycountsoiree);
            $lignecountsoiree = mysqli_fetch_array($resultcountsoiree);
            if($lignecountsoiree['nb'] > 0) {
            
            echo "<table class='result'>";
            echo "<tr><th colspan='7' class='result'>En tant qu'interpr&egrave;te</th></tr>";
     
            
            $qrysoiree = "SELECT * FROM chanson WHERE id IN (SELECT idchanson FROM interprete WHERE idpersonne = ".$text.") ORDER by titre";
            $resultsoiree = mysqli_query($connexion, $qrysoiree);
                                            
                                    while ($lignesoiree = mysqli_fetch_array($resultsoiree))
                                            {
                                            extract($lignesoiree); 
                                            $chanson = $id;
                                            $qryevent = "SELECT * FROM interpretation WHERE idchanson = ".$id;
                                            $resultevent = mysqli_query($connexion, $qryevent);
                                            $ligneevent = mysqli_fetch_array($resultevent);
                                            $qryevent2 = "SELECT * FROM event WHERE id = ".$ligneevent['idevent'];
                                            $resultevent2 = mysqli_query($connexion, $qryevent2);
                                            $ligneevent2 = mysqli_fetch_array($resultevent2);                                       
                                            
                                            
                                            
                                            echo "<tr class='result2'>";
                                      echo "<td class='result'><a class='titre' href='?".$id."'></form>".$titre."</a></td>";
                                        echo "<td class='result'><a class='event' href='?".$ligneevent2['id']."'>".$ligneevent2['libel']."</a></td>";
                                            echo "<td class='result'>";
                                            $qryauteur = "SELECT idpersonne as auteur FROM auteur WHERE idchanson = ".$id;
                                            $resultauteur = mysqli_query($connexion, $qryauteur);
                                            while ($ligneauteur = mysqli_fetch_array($resultauteur))
                                            {
                                                    extract($ligneauteur);
                                                    $qryauteur2 = "SELECT * FROM personne WHERE id = ".$auteur;
                                                    $resultauteur2 = mysqli_query($connexion, $qryauteur2);
                                                    $ligneauteur2 = mysqli_fetch_array($resultauteur2);
                                            echo $ligneauteur2['prenom']." ".$ligneauteur2['nomfamille']."<br>";
                                            }
                                            echo "</td>";
                                            echo "<td class='result'>";
                                            $qrycompo = "SELECT idpersonne as compo FROM compositeur WHERE idchanson = ".$id;
                                            $resultcompo = mysqli_query($connexion, $qrycompo);
                                            while ($lignecompo = mysqli_fetch_array($resultcompo))
                                            {
                                                    extract($lignecompo);
                                                    $qrycompo2 = "SELECT * FROM personne WHERE id = ".$compo;
                                                    $resultcompo2 = mysqli_query($connexion, $qrycompo2);
                                                    $lignecompo2 = mysqli_fetch_array($resultcompo2);
                                            echo $lignecompo2['prenom']." ".$lignecompo2['nomfamille']."<br>";
                                            }
                                            echo "</td>";
                                            echo "<td class='result'>";
                                            $qryinter = "SELECT idpersonne as inter FROM interprete WHERE idchanson = ".$id;
                                            $resultinter = mysqli_query($connexion, $qryinter);
                                            while ($ligneinter = mysqli_fetch_array($resultinter))
                                            {
                                                    extract($ligneinter);
                                                    $qryinter2 = "SELECT * FROM personne WHERE id = ".$inter;
                                                    $resultinter2 = mysqli_query($connexion, $qryinter2);
                                                    $ligneinter2 = mysqli_fetch_array($resultinter2);
                                            echo $ligneinter2['prenom']." ".$ligneinter2['nomfamille']."<br>";
                                            }
                                            echo "</td>";
                                      echo "<td class='result'>";
                                            $qryharmo = "SELECT idpersonne as harmo FROM harmonisateur WHERE idchanson = ".$id;
                                            $resultharmo = mysqli_query($connexion, $qryharmo);
                                            while ($ligneharmo = mysqli_fetch_array($resultharmo))
                                            {
                                                    extract($ligneharmo);
                                                    $qryharmo2 = "SELECT * FROM personne WHERE id = ".$harmo;
                                                    $resultharmo2 = mysqli_query($connexion, $qryharmo2);
                                                    $ligneharmo2 = mysqli_fetch_array($resultharmo2);
                                            echo $ligneharmo2['prenom']." ".$ligneharmo2['nomfamille']."<br>";
                                            }
                                      echo "</td>";
                                      echo "<td class='result'>";
                                            $qrydocs = "SELECT * FROM doctype";
                                            $resultdocs = mysqli_query($connexion, $qrydocs);
                                            while ($lignedocs = mysqli_fetch_array($resultdocs))
                                              {
                                                       extract($lignedocs);
                                            $qrydoc = "SELECT count(*) as nb FROM document WHERE doctype IN (SELECT doctype FROM document WHERE idchanson = ".$chanson." AND doctype = ".$id.")";
                                              $resultdoc = mysqli_query($connexion, $qrydoc);
                                            while ($lignedoc = mysqli_fetch_array($resultdoc))
                                                       extract($lignedoc);
                                                       {
                                                             if($nb>0){
                                                             
                                                               echo "<img src='img/type".$id.".png' title='".$type."'>&nbsp;";
                                                             }
                                                       else {
                                                                    echo "<img src='img/type0.png'>&nbsp";
                                                            }
                                                       }
                                             }
                                       echo "</td>";
                                            }
                            echo "</tr></table><br>";
                                    
            }
            
            ?>

  8. #8
    Invité
    Invité(e)
    Par défaut
    3- Les fichiers songdetail.php et person.php sont appelés via ajax :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	$.post('songdetail.php', {song:song}, function(donnees){
    ...
    	$.post('person.php', {person:person}, function(donnees){
    ...
    Il NE doivent PAS contenir les balises HTML <html>, <head>, <body>,... car leur contenu sera INCLUS dans la page (via Ajax)


    4-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    			$('.result').html(donnees);
    On trouve encore plusieurs éléments avec la classe "result" !

    Le programme ne va pas savoir où le mettre ! (ou plutôt, il va essayer de le mettre dans CHAQUE élément de classe "result").

    Connais-tu la différence entre classe et id ?
    • un id est UNIQUE. Il ne doit être appliqué qu'à UN SEUL élément
    • une classe peut être appliquées à plusieurs éléments


    donc, définis clairement l'élement dans lequel tu veux afficher les résultats, en lui affectant un id !

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <div id="display-results"></div>
    Dernière modification par Invité ; 26/10/2018 à 17h43.

  9. #9
    Candidat au Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Octobre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Octobre 2018
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Salut.

    Je n'ai pas eu le temps de tester avant, mais là ça fonctionne.

    Merci infiniment, ça faisait un moment que je galérais.

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

Discussions similaires

  1. [MySQL] lien suite recherche BDD
    Par vigo2003 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/05/2010, 11h16
  2. Syntaxe lien hypertexte, recherche de dossier
    Par aleximan dans le forum Excel
    Réponses: 6
    Dernier message: 23/06/2009, 11h10
  3. des liens pour recherche de feuilles
    Par Mapokko dans le forum Excel
    Réponses: 4
    Dernier message: 28/12/2008, 22h06
  4. Lien de recherche dans la page
    Par romfauch63 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/04/2008, 11h36

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