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 :

3 listes liées [AJAX]


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2011
    Messages : 99
    Par défaut 3 listes liées
    bonsoir, j ai récupéré sur le net un code ajax pour liée 3 liste, je l ai testé en local et il fonctionne, j ai voulu l adapté pour ma situation

    a première vu j ai cru qu' il fonctionnait, cependant le résultat sur mon select 3 n est pas bon et je sais pas pourquoi

    j ai mis ma liste liée en ligne pour que vous puissiez comprendre concrètement a cette adresse http://www.creaweb68.fr/CW/autotran/liste_dynamique/

    si dans le select catégorie on choisi CABRIOLET le 2 eme donne Peugeot... jusque la tout va bien mais si je click sur Peugeot il me renvoi dans le troisième select plusieurs modèle alors que j en possède Qu' un dans ma base ..

    voici le code que j utilise:

    mon ajax
    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
    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
     
    // JavaScript Document
    $(document).ready(function() {
    	var $Carosserie = $('#Carosserie');
    	var $Marque = $('#Marque');
    	var $Modele = $('#Modele');
     
    	// chargement de la liste de localité un
    	$.ajax({
    		url: 'liste.php',
    		data: 'go', // on envoie $_GET['go']
    		dataType: 'json', // on veut un retour JSON
    		success: function(json) {
    			$.each(json, function(index, value) {
    				// pour chaque noeud JSON
    				// on ajoute l option dans la liste
    				$('#Carosserie').append('<option value="'+ index +'">'+ value +'</option>');
    			});
    		}
    	});
     
    	// à la sélection de la localité un dans la liste
    	$Carosserie.on('change', function() {
    		var val = $(this).val(); // on récupère la valeur de la localité un
    		if(val != '') {
    			$Marque.empty(); // on vide la liste de localité deux
    			$Marque.append('<option value="">Marque</option>');
     
    			$.ajax({
    				url: 'liste.php',
    				data: 'Carosserie='+ val, // on envoie $_GET['localite_un']
    				dataType: 'json',
    				success: function(json) {
    					$.each(json, function(index, value) {
    						$Marque.append('<option value="'+ index +'">'+ value +'</option>');
    					});
    				}
    			});
    		}
    		else {
    			$Marque.empty();
    			$Marque.append('<option value="">Marque</option>');
    			$Modele.empty(); // on vide la liste de localité deux
    			$Modele.append('<option value="">Modele</option>');
    		}
    	});
     
    	// à la sélection de la localité deux dans la liste
    	$Marque.on('change', function() {
    		var val = $(this).val(); // on récupère la valeur de la localité deux
    		if(val != '') {
    			$Modele.empty(); // on vide la liste de localité trois
    			$Modele.append('<option value="">Modele</option>');
     
    			$.ajax({
    				url: 'liste.php',
    				data: 'Marque='+ val, // on envoie $_GET['localite_deux']
    				dataType: 'json',
    				success: function(json) {
    					$.each(json, function(index, value) {
    						$Modele.append('<option value="'+ index +'">'+ value +'</option>');
    					});
    				}
    			});
    		}
    		else {
    			$Modele.empty();
    			$Modele.append('<option value="">Modele</option>');
    		}
    	});
    });
    mon php
    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
    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
     
    <?php
     
     
     
    // Vérification des paramètres d'accès au fichier liste.php
    if(isset($_GET['go']) || isset($_GET['Carosserie']) || isset($_GET['Marque'])) {
    	// connexion à la base de données
    	try {
    		$bdd = new PDO('mysql:host=localhost;dbname=Autotransaction', 'root', '');
    	} catch(Exception $e) {
    		exit('Impossible de se connecter à la base de données.');
    	}
     
    	$json = array();
     
    	if(isset($_GET['go'])) {
     
    		// requête qui récupère les localités un
    		$requete = "SELECT DISTINCT(Carosserie) FROM autotran ";
    		// exécution de la requête
    		$resultat = $bdd->query($requete) or die(print_r($bdd->errorInfo()));
    		// Création de la liste
    		while($donnees = $resultat->fetch(PDO::FETCH_ASSOC)) {
    			// je remplis un tableau et mettant l'id en index
    			$json[$donnees["Carosserie"]][] = utf8_encode($donnees["Carosserie"]);
          //execute la requete,recupere les resultats et fusionne avec le modele html
     
    		}
    	}
    	elseif(isset($_GET['Carosserie'])) {
    		// requête qui récupère les localités un
    		$requete = "SELECT DISTINCT(Marque) FROM autotran WHERE Carosserie = '".$_GET['Carosserie']."' ";
    		// exécution de la requête
    		$resultat = $bdd->query($requete) or die(print_r($bdd->errorInfo()));
    		// Création de la liste
    		while($donnees = $resultat->fetch(PDO::FETCH_ASSOC)) {
    			// je remplis un tableau et mettant l'id en index
    			$json[$donnees["Marque"]][] = utf8_encode($donnees["Marque"]);
    		}
    	}
    	elseif(isset($_GET['Marque'])) {
    		// requête qui récupère les localités un
    		$requete = "SELECT DISTINCT(Modele) FROM autotran WHERE Marque = '".$_GET['Marque']."'";
    		// exécution de la requête
    		$resultat = $bdd->query($requete) or die(print_r($bdd->errorInfo()));
    		// Création de la liste
    		while($donnees = $resultat->fetch(PDO::FETCH_ASSOC)) {
    			// je remplis un tableau et mettant l'id en index
    			$json[$donnees["Carosserie"]][] = utf8_encode($donnees["Modele"]);
    		}
    	} 
    	 // envoi du résultat au success
    	echo json_encode($json);
    }
     
    ?>

    et mon html
    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
     
    <html>
        <head>
            <script type="text/javascript" src="jquery-1.7.1.min.js"></script>
            <script type="text/javascript" src="liste.js"></script>
        </head>
        <body>
            <select id="Carosserie">
            	<option value="">Catégories</select>
            </select> <br />
            <select id="Marque">
            	<option value="">Marque</select>
            </select> <br />
            <select id="Modele">
            	<option value="">Modele</select>
            </select>
        </body>
    </html>

    merci d avance pour l aide apporté

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonjour

    Merci de mettre votre exemple en ligne à jour avec un jQuery correct, soit jQuery 1.11.0 (compatible avec les navigateurs IE 8 et moins) ou jQuery 2.1.0 (non compatible).

    http://jquery.com/download/

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2011
    Messages : 99
    Par défaut
    bonsoir, merci pour la réponse, j ai mis a jour le fichier jquery en 1.11.0

    je penche pour un problème de requête qui prenne en compte le select 1 et le select 2 en condition pour que le select 3 affiche les résultat correct mais j en suis pas sur étant débutant

  4. #4
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    Faire un test avec ce code :

    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
    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
        var $Carosserie = $('#Carosserie'),
            $Marque = $('#Marque'),
            $Modele = $('#Modele'),
            jqXHRGo = $.getJSON( "liste.php", { "param" : "go" } ); // $_GET[ "param" ]
     
        jqXHRGo.done( function( data, textStatus, jqXHR ){
            // succès de la transaction, on doit traiter le contenu de data
           // console.log( data, textStatus, jqXHR );
     
            $.each( data, function( index, value ){
                $( '#Carosserie' ).append( '<option value="'+ index +'">'+ value +'</option>');
            });                
        });
     
        $Carosserie.on('change', function() {
            var val = $(this).val();
     
            if ( val != '' ){
                $Marque.empty();
                $Marque.append('<option value="">Marque</option>');
     
                var jqXHRCarosserie = $.getJSON( "liste.php", { "carosserie" : val } ); // $_GET[ "carosserie" ]
     
                jqXHRCarosserie.done( function( data, textStatus, jqXHR ){
                    // succès de la transaction, on doit traiter le contenu de data
                    // console.log( data, textStatus, jqXHR );
     
                    $.each( data, function( index, value ){
                        $Marque.append('<option value="'+ index +'">'+ value +'</option>');
                    });                
                });
            }
            else {
                $Marque.empty();
                $Marque.append('<option value="">Marque</option>');
                $Modele.empty();
                $Modele.append('<option value="">Modele</option>');
            }
        });
     
        $Marque.on('change', function() {
            var val = $(this).val();
     
            if(val != '') {
                $Modele.empty();
                $Modele.append('<option value="">Modele</option>');
     
                var jqXHRMarque = $.getJSON( "liste.php", { "marque" : val } ); // $_GET[ "marque" ]
     
                jqXHRMarque.done( function( data, textStatus, jqXHR ){
                    // succès de la transaction, on doit traiter le contenu de data
                    // console.log( data, textStatus, jqXHR );
     
                    $.each( data, function( index, value ){
                        $Modele.append('<option value="'+ index +'">'+ value +'</option>');
                    });                
                });
            }
            else {
                $Modele.empty();
                $Modele.append('<option value="">Modele</option>');
            }
        });

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Par défaut
    ben les amis , déconnez pas... il s'agit d'un problème de php/bdd, car le multiSelect fait bien son boulot jusqu’à preuve du contraire

  6. #6
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2011
    Messages : 99
    Par défaut
    bonjour, désolé mais plus rien fonctionne avec le code proposé comme dit ascito c est surement le php car tout répond correctement a part le résultat sur le select 3

  7. #7
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    La rédaction de vos transactions JSON au niveau de la transmission des paramètres et le libellé de vos $_GET[] sont pourtant très bizarres.

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

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

Discussions similaires

  1. Pb listes liées javascript/php
    Par boo64 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 06/06/2006, 12h35
  2. Deux listes lies et un lien
    Par arti2004 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 07/03/2006, 16h44
  3. [MySQL] 1 table et 2 listes liées
    Par Ekik dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 07/02/2006, 16h47
  4. XMLHTTPRequest et listes liées
    Par ben23 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 31/12/2005, 16h32
  5. Problème avec listes liées entre elles et bouton "précé
    Par Oluha dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/08/2005, 15h10

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