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

JavaScript Discussion :

ajax, php et 3 listes déroulantes liées


Sujet :

JavaScript

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2003
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 144
    Points : 112
    Points
    112
    Par défaut ajax, php et 3 listes déroulantes liées
    Bonjour à tous,

    avant de commencer, je précise que j'ai lu et appliqué l'excellent tutoriel de siddh http://siddh.developpez.com/articles/ajax/. Grâce à lui, je lie sans problème deux listes déroulantes.
    Mais voilà, on en veut toujours plus et j'ai tenté de lié une 3e liste déroulante à partir de la 2e. Et je coince de nouveau J'ai adapté le code de siddh en créant une fonction supplémentaire qui s'exécute sur le onclick de la 2e mais rien ne se passe (la requête sql testée sous mysql fonctionne bien).
    Merci pour vos lumières.
    Quelques précisions:
    • la première liste déroulante permet de sélectionner une année.
    • en fonction de l'année sélectionnée, la deuxième liste propose les mois de 10 à 12 ou de 01 à 09
    • la troisième liste devrait s'incrémenter de 01 à 31 ou de 01 à 30 ou encore de 01 à 28 (ou 29)

    Voici le 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
    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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml">
     
    <head>
      <title>Carnet de Bord de l'Archer</title>
    	<script type='text/javascript'>
     
    		function getXhr(){
    							var xhr = null; 
    			if(window.XMLHttpRequest) // Firefox et autres
    			   xhr = new XMLHttpRequest(); 
    			else if(window.ActiveXObject){ // Internet Explorer 
    			   try {
    						xhr = new ActiveXObject("Msxml2.XMLHTTP");
    					} catch (e) {
    						xhr = new ActiveXObject("Microsoft.XMLHTTP");
    					}
    			}
    			else { // XMLHttpRequest non supporté par le navigateur 
    			   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    			   xhr = false; 
    			} 
    							return xhr;
    		}
     
    		/**
    		* Méthode qui sera appelée sur le click du bouton "Année"
    		*/
    		function go_mois(){
    			var xhr = getXhr();
    			// On défini ce qu'on va faire quand on aura la réponse
    			xhr.onreadystatechange = function(){
    				// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    				if(xhr.readyState == 4 && xhr.status == 200){
    					leselect = xhr.responseText;
    					// On se sert de innerHTML pour rajouter les options a la liste
    					document.getElementById('mois').innerHTML = leselect;
    				}
    			}
     
    			// Ici on va voir comment faire du post
    			xhr.open("POST","ajaxMois.php",true);
    			// ne pas oublier ça pour le post
    			xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    			// ne pas oublier de poster les arguments
    			// ici, l'id de l'année
    			sel = document.getElementById('année');
    			idsaison = sel.options[sel.selectedIndex].value;
    			xhr.send("saison="+idsaison);
    		}
     
    		function go_jour(){
    			var xhr = getXhr();
    			// On défini ce qu'on va faire quand on aura la réponse
    			xhr.onreadystatechange = function(){
    				// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    				if(xhr.readyState == 4 && xhr.status == 200){
    					leselect = xhr.responseText;
    					// On se sert de innerHTML pour rajouter les options a la liste
    					document.getElementById('jour').innerHTML = leselect;
    				}
    			}
     
    			// Ici on va voir comment faire du post
    			xhr.open("POST","ajaxJour.php",true);
    			// ne pas oublier ça pour le post
    			xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    			// ne pas oublier de poster les arguments
    			// ici, l'id de l'année
    			sel = document.getElementById('année');
    			idsaison = sel.options[sel.selectedIndex].value;
    			xhr.send("saison="+idsaison);
    		}
    	</script>
    </head>
     
    <body>
     
    <?php
    include ('session.php');
    include ('menu.html');
    ?>
    <br/><br/><br/>
    <em><strong><font color="#0000CC" size="-1" face="Arial, Helvetica, sans-serif">Insérer un événement 
    (entraînement ou compétition)</font></strong></em> 
    <form name="f_archer_carnet2" action="archer_carnet_test.php" method="post">
      <br />
    		Date <select name='année' id='année' onchange='go_mois()'>
    					<option value='-1'>Aucune</option>
    					<?php
                                                    require ('base.cnx.php');
                                                    $sql_saison = "select sainum, saian from jfr_saison order by sainum";
                                                    $rq_saison = mysqli_query($cnx, $sql_saison);
                                                    while($ligne_saison = mysqli_fetch_assoc($rq_saison)){
                                                            echo "<option value='".$ligne_saison["sainum"]."'>".$ligne_saison["saian"]."</option>";
                                                    }
                                            ?>
    				</select></td>
    			<div id='mois' style='display:inline'>
    				<select name='mois' onchange='go_jour()'>
    					<option value='-1'>Mois</option>
    				</select>
    				</div>
     
    			<div id='jour' style='display:inline'>
    				<select name='jour'>
    					<option value='-1'>Jour</option>
    				</select>
    				</div>

  2. #2
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2003
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 144
    Points : 112
    Points
    112
    Par défaut
    Bon, j'ai une partie de la réponse: il fallait ajouter l'événement onload dans le fichier cible de la fonction go_jour() (dans la page principale, le select n'est présent que pour la mise en page).
    Après l'avoir testé, j'ai affiché le code source de la page générée et rien n'apparaît dans les options value du select des mois! Comment faire pour récupérer, dès lors, l'id du mois sélectionné?

Discussions similaires

  1. Liste déroulante liée (PHP-AJAX)
    Par emangeot dans le forum Langage
    Réponses: 1
    Dernier message: 01/12/2014, 15h41
  2. [AJAX] 3 listes déroulantes liées PHP/MYSQL/AJAX
    Par zied.ellouze dans le forum AJAX
    Réponses: 2
    Dernier message: 06/09/2011, 12h58
  3. [AJAX] avec 3 listes déroulantes liées php+xhtml+css+javascript+ajax
    Par Invité dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 27/12/2008, 15h54
  4. [AJAX] Listes déroulantes liées php+ajax
    Par Sh4dow49 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 11/07/2008, 15h31

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