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 :

[AJAX] 4 listes deroulantes liees


Sujet :

AJAX

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Points : 12
    Points
    12
    Par défaut [AJAX] 4 listes deroulantes liees
    Bonjour, j'ai essaye de lier 4 listes deroulantes pour :

    Pays - Departement - Ville - Rue

    Ca marche quand j'ouvre la page pour la premiere fois des que je choisi le pays tous les select changent.

    mais le select 'rue' reste sur la derniere rue choisie. quand je fais un autre select sur Pays ou sur Departement. ce n'est que quand je choisi une ville que ca change pour la select rue.

    Merci de votre aide.

    J'ai en outre avec firefox l'error:

    uncaught exception Index or size is negative or greater than the allowed amount code:"1" nsresult:"0x80530001 (NS_ERROR_DOM_INDEX_SIZE_ERR)

    Une idee?

    Voici les pages:

    Page principale index.php

    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
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
     
    <?php
    session_start();
    //header('Content-type: text/html; charset=utf-8');
    include('../includes/config.php');
    include('../includes/fonctions.php');
    require("../conf1/fonc.inc.php"); 
    require '../actualite/DirectoryItems.php';
     
    $_SESSION['page']=ROOTPATH.$_SERVER['PHP_SELF'];
    ?>
     
    	<?php
    	if(isset($design) && trim($design) !='')
    	$design = $design;
    	else
    	//$design = DESIGN;
    	$design='accueil-actu';
    	?>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" > 
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
    <title>Administration de REPERES</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;
    			}
    				function go(){
    				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;
    						document.getElementById('departement').innerHTML = leselect;
    						document.getElementById('departement').onchange = goville;
    						document.getElementById('departement').onchange = gorue;
    						goville();
    						gorue();
    					}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("POST","departement.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'auteur
    				sel = document.getElementById('nonpays');
    				codeiso = sel.options[sel.selectedIndex].value;
    				xhr.send("codeIso="+codeiso);
    			}
    				function goville(){
    				var xhr = getXhr();
    				// On défini ce qu'on va faire quand on aura la réponse
    				//var idville= document.getElementById('idville').value;
    				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('laville').innerHTML = leselect;						
    						document.getElementById('laville').onchange = gorue;
    						gorue();
    					}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("POST","ville.php",true);
    				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    				sel = document.getElementById('nonville');
    				idville = sel.options[sel.selectedIndex].value;
    				xhr.send("idville="+idville);
    			}
    				function gorue(){
    						var xhr = getXhr();
    						xhr.onreadystatechange = function(){
    						if(xhr.readyState == 4 && xhr.status == 200){
     
    						leselect = xhr.responseText;
    						// On se sert de innerHTML pour rajouter les options a la liste						
    						document.getElementById('larue').innerHTML = leselect;				
    						}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("POST","rue.php",true);
    				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    				sel = document.getElementById('nonrue');
    				idrue = sel.options[sel.selectedIndex].value;
    				xhr.send("idrue="+idrue);
     
    			}
     
    </script>
     
     
    <meta name="keywords"  content="video jacmel, video haiti, carnaval jacmel,carnaval 2008,invincible de jacmel, Raram, Carimi,Ram,Black Parents, Barikad Crew,jouvenceau de jacmel,Afrika band de jacmel,Dolphin's Band,Fresh up band,family band de jacmel,Fresh style Band,Feeling Band,A la one Dezod,Base jeune gens, Ram 6,valliers club de jacmel, superstar naval,relax band,ghetto band de jacmel,musique jacmel, musique d'haiti,bon zouti,bons outils pour un bon surf,sonice jacmel,carnival,mizik Ayiti,listen music jacmel" />
    <meta name="description"  content="visionnez toutes les vidéos de jacmel et d'haiti sur bonzouti, compas, carnaval 2008, rap, et toutes les nouveautés musicales de jacmel." />
    	<link rel="stylesheet" type="text/css" href="<?php echo ROOTPATH; ?>/styles/<?php echo $design; ?>.css" media="screen" />
        <link rel="stylesheet" type="text/css" href="<?php echo ROOTPATH; ?>/styles/intersection.css" media="screen" />
    	<link rel="stylesheet" title="Design" href="<?php echo ROOTPATH; ?>/design.css" type="text/css" media="screen" />
     
    	<script language="JavaScript">
    function favoris() {
    if ( navigator.appName != 'Microsoft Internet Explorer' )
    { window.sidebar.addPanel("Bonzouti.com","http://www.bonzouti.com",""); }
    else { window.external.AddFavorite("http://www.bonzouti.com","Bonzouti"); } }
    </script>
     
    </head>
    <body onload='go()'>
     
    <div id="conteneur">
    <div id="tete-header">
    <div class="tete-header-left"></div> 
    <div class="tete-header-right">
    			<?php
                            if(isset($_SESSION['membre_id']))
                            {
                            ?>
    				<a href="<?php echo ROOTPATH; ?>/membres/moncompte.php">Gérer mon compte</a>  |  <a href="<?php echo ROOTPATH; ?>/membres/deconnexion.php">Se déconnecter</a> | <a href="<?php echo ROOTPATH; ?>/membres/user.php?id=<?php echo $_SESSION['membre_id']; ?>">Consulter mon compte</a> 
    			<?php
                            }
                            
                            else
                            {
                            ?>
    				<a href="<?php echo ROOTPATH; ?>/membres/inscription.php">Inscription</a>   <a href="<?php echo ROOTPATH; ?>/membres/connexion.php">Connexion</a>
    			<?php
                            }
                            ?>
    </div>
    <!-- anciencourr header 	background-color: #FFD700;-->
    </div>
    <div id="header">
    <div class="logo">
    <img src="<?php echo ROOTPATH; ?>/images/logo_vert.png" />
     
    <p>De bons outils pour un bon surf!</p>
    </div>
    <div class="header-droit">
     
    </div>
    </div>
    <div id="tete-menu"></div>
    <div id="div-menu">
    <div class="contenu-menu">
    			<div class="contenu-menu-left">
    			<ul>
    			<li><a href="javascript:void(favoris());">Ajoutez aux favoris</a></li>
    			<li><a href="http://bonzouti.com/contact-us.php" title="contact bonzouti" >Contact</a></li>
    			<li><a href="http://bonzouti.com/about-us.php" title="Qui sont les administrateurs de Bonzouti.com?" >Qui sommes nous?</a></li>
     
    			</ul>
    			</div>
    			<div class="contenu-menu-right">
    			<?php menu_principal_horizontal(); ?>
    			</div>
    </div>
    </div>
    <div id="column2">
        <div id="column1">
            <div id="navcol">	
            </div><!-- #navcol -->
            <div id="sidecol">
    								<div class="center">
     
     
    						</div>
     
            </div><!-- #sidecol -->
            <div id="main">
    						<form name='formville'  >
    								<fieldset style="width: 500px">
    								<legend>Formulaire pour reperes</legend>
    								<label>Pays</label>
    								<select name='nonpays' id='nonpays' onchange='go()'>
     
    									<?php
    										mysql_connect("localhost","root","");
    										mysql_select_db("test");
    										//$res = mysql_query("SELECT * FROM auteur ORDER BY nom");
    										$res = mysql_query("SELECT iso,country FROM country_info where iso='DO' or iso='HT' or iso='US' or iso='FR' or iso='CA' ORDER BY country"); 
    										while($row = mysql_fetch_assoc($res)){
    										echo "<option value='".$row["iso"]."'>".$row["country"]."</option>"; 
    										}
    									?>
    									</select>
    									<br /><br />
    									<label>Departement</label>
    									<div id="departement" style='display:inline'>
    									<select name='nonville' id='nonville'>
    									<option value='-1'>Choisir un departement</option>
    									</select>
    									</div>
    										<br /><br />
     
    									<label>Ville</label> 
    									<div id='laville' style='display:inline' > 
    									<select name='nonrue' id='nonrue' > 
    									<option value='-1'>Choisir une ville</option>
    									</select> 
    									</div>										
    									<br /> Si  autre:<input type="text" name="ville" />
    									<br /><br />
    									<label>Rue</label> 
    									<div id='larue' style='display:inline' > 
    									<select name='marue' id='marue'> 
    									<option value='-1'>Choisir une ville</option> 
    									</select> 
    									</div> 
    									<br />Si autre:<input type="text" name="namerue" />
    									<br />
    									<input type="submit" value="ajouter" />
     
    				</form>
     
     
    			</div><!-- #main -->
    						<div class="clear">&nbsp;</div>
        </div><!-- #column1 -->
    </div><!-- #column2 -->
    departement.php
    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
     
    <?php
    	echo "<select name='nonville' id='nonville' onchange='goville()'>";
    	//$_POST["codeIso"]='HT';
    	if(isset($_POST["codeIso"])){
    		mysql_connect("localhost","root","");
    		mysql_select_db("test");
    		//$res = mysql_query("SELECT id,titre FROM livre 	WHERE idAuteur=".$_POST["codeIso"]." ORDER BY titre");
    		//$res = mysql_query("SELECT nameAscii,LEFT(code,2) as tata  FROM admin1codesascii WHERE LEFT(code,2)='US'"); 
    		$res = mysql_query("SELECT nameAscii, LEFT(code,2),code  FROM admin1codesascii WHERE LEFT(code,2)='".$_POST["codeIso"]."'");
    		while($row = mysql_fetch_assoc($res)){
    			echo "<option value='".$row["code"]."'>".$row["nameAscii"]."</option>";
    		}
    	}
    	echo "</select>";
    ?>

    ville.php
    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
     
     
     
    <?php 
    echo "<select name='nonrue' id='nonrue' onchange='gorue()'>"; 
    //$_POST['idville']='HT.13';
    if(isset($_POST["idville"])){ 
    mysql_connect("localhost","root",""); 
    mysql_select_db("test"); 
    //$res = mysql_query("SELECT id,prix FROM prixlivre WHERE idLivre=".$_POST["idLivre"]." ORDER BY prix"); 
    $res = mysql_query("SELECT  * FROM ville WHERE codedepartement='".$_POST['idville']."' order by idville DESC"); 
    while($row = mysql_fetch_assoc($res)){ 
    echo "<option value='".$row["idville"]."'>".$row["nameville"]." </option>"; 
    } 
    } 
     
    echo "</select>"; 
    ?>
    rue.php

    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
     
     
    <?php 
    echo "<select name='marue' id='marue'>"; 
    //$_POST['idRue']='HT.06';
    if(isset($_POST["idrue"])){ 
    $tata=explode('.', $_POST['idRue']);
    $codeVille=$tata[1];
    $codePays=$tata[0];
    mysql_connect("localhost","root",""); 
    mysql_select_db("test"); 
    //$res = mysql_query("SELECT id,prix FROM prixlivre WHERE idLivre=".$_POST["idLivre"]." ORDER BY prix"); 
    $res = mysql_query("SELECT  * FROM rue WHERE codeville='".$_POST['idrue']."' order by namerue ASC"); 
    while($row = mysql_fetch_assoc($res)){ 
    echo "<option value='".$row["coderue"]."'>".$row["namerue"]." </option>"; 
    } 
    } 
    echo "</select>"; 
     
     
    ?>

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    avant d'aller plus loin, vérifie les enchaînements d'évènements que tu veux obtenir.
    Ici par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	document.getElementById('departement').onchange = goville;
    document.getElementById('departement').onchange = gorue;
    gorue écrase goville => seul le premier sera lancé ...

    Sinon, ton erreur semble indiquer que ton code tente d'accéder par exemple à une option de liste avec un index supérieur à la longueur de la liste.

    A+

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Points : 12
    Points
    12
    Par défaut
    E.Bzz merci

    j'ai c'est erreur ave la ligne 88

    idville = sel.options[sel.selectedIndex].value;

    je n'ai aucune idee

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Avec ce code là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    				if(xhr.readyState == 4 && xhr.status == 200){
    						leselect = xhr.responseText;
    						document.getElementById('departement').innerHTML = leselect;
    						document.getElementById('departement').onchange = goville;
    						document.getElementById('departement').onchange = gorue;
    						goville();
    						gorue();
    tu déclenches goville() et gorue() alors que les paramètres nécessaire (idville par exemple) ne sont pas alimentés (pas de choix fait par l'utilisateur, ni de selected par défaut) ...

    Il doit y avoir un problème

    De plus je ne comprends pas ce que tu alimentes dans les 2 autres listes sans même avoir choisi un département (voir fonction go) ....

    Essaye donc de virer goville() et gorue() de la fonction go() et laisse l'utilisateur (toi, pour l'instant) faire ses choix dans les listes : il me semble que ton script est plutôt prévu pour ça

    ... et vire aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('departement').onchange = gorue;
    Tu ne vas pas alimenter la liste des rues juste à partir du choix du departement, si ?

    A+

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    ... et en bonus : quel est l'intérêt d'appeler ta fonction go() sur onload du body ?

    Un appel Ajax sur onload est une erreur dans la majorité des cas (dont ici).

    Tu n'as qu'à générer la liste de tes département lors de la génération de la page : ça simplifiera déjà pas mal
    Et améliorera la logique de ta page

    Normalement tu dois avoir :
    Chargement de la page => liste départements déjà alimentée
    => choix département par l'utilisateur
    => alimentation de la liste des villes (du département choisi, donc)
    => choix ville par l'utilisateur
    => alimentation de la liste des rues (de la ville choisie, donc)

    A+

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Points : 12
    Points
    12
    Par défaut
    Bonjour E.Bzz et merci pour votre aide,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    						document.getElementById('departement').innerHTML = leselect;
    						document.getElementById('departement').onchange = goville;
    						document.getElementById('departement').onchange = gorue;
    						goville();
    						gorue();
    J'ai mis go() en onLoad dans le body et j'ai choisi des l'arrive sur le formulaire un pays par defaut qui affiche en meme temps le departement, la ville et la derniere rue choisie. Je met deux input a cote de ville et a cote de rue pour les ajoutes .

    Le probleme vient du fait que quand je choisi un departement et qu'il n'a pas encore de ville ca cause probleme. La derniere rue affiche reste inchangee jusqu'a ce que je choisi un departement qui a une ville, c'est a ce moment la que le select qui affiche rue change.

    C'est ca le probleme

  7. #7
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par Jeol2007 Voir le message
    J'ai mis go() en onLoad dans le body et j'ai choisi des l'arrive sur le formulaire un pays par defaut qui affiche en meme temps le departement, la ville et la derniere rue choisie. Je met deux input a cote de ville et a cote de rue pour les ajoutes .

    Le probleme vient du fait que quand je choisi un departement et qu'il n'a pas encore de ville ca cause probleme. La derniere rue affiche reste inchangee jusqu'a ce que je choisi un departement qui a une ville, c'est a ce moment la que le select qui affiche rue change.

    C'est ca le probleme
    Oui, c'est bien ce que j'avais compris, et c'est d'ailleurs à ce que tu décris (entre autre) que j'ai déjà répondu ci-dessus ...

    Je te laisse relire

    A+

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Points : 12
    Points
    12
    Par défaut
    Bonjour merci pour ton aide.

    J'ai fait tout le changement mais ca ne marche toujours pas.

    Le probleme c'est le select rue qui reste inchange au niveau des departements qui n'ont pas de ville.

    Et puis autre chose pour le departement quand je choisi mon pays, il m'affiche un departement par defaut qui possede une ville, mais il ne fait pas le ONCHANGE pour rue je dois choisir un autre departement pour retourner sur departement pour faire fonctionner le select ville.


    Ps. Je n'ai pas vu ton deuxieme post

Discussions similaires

  1. [MySQL] Listes deroulantes liees
    Par axe31 dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 22/05/2012, 15h52
  2. Réponses: 1
    Dernier message: 02/10/2008, 18h14
  3. [AJAX] actualisation liste deroulante si retour page précedente
    Par pascale86 dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 01/02/2008, 09h49
  4. [AJAX] Formulaire liste deroulante ajax
    Par trilla dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 28/08/2007, 19h47
  5. Comment attribuer un lien à une liste déroulante liée ?
    Par matgk26 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 29/08/2006, 16h07

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