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] Liste SELECT influant le contenu d'un autre SELECT via SQL


Sujet :

AJAX

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juin 2011
    Messages : 16
    Points : 6
    Points
    6
    Par défaut [AJAX] Liste SELECT influant le contenu d'un autre SELECT via SQL
    Bonjour,

    je reprends le sujet "Résolu": http://www.developpez.net/forums/d17...listes-chaine/

    Mon formulaire sélectionne dans un 1er temps un Pays (id = country), qui va influencer donc les régions dans le SELECT (liste) suivant, Régions (id = region) et ainsi de suite...

    Voici mon 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
    var xhr = null; 
    function getXhr(){
    	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; 
    	} 
    }
    /**
    * Méthode qui sera appelée sur le click du bouton
    */
    function go(){
    	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('region').innerHTML = leselect;
    		}
    	}
    	// Ici on va voir comment faire du post
    	xhr.open("POST","ajaxregion.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('country');
    	idcountry = sel.options[sel.selectedIndex].value;
    	xhr.send("idcountry="+idcountry);
    }
    function goreg(){
    	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('department').innerHTML = leselect;
    		}
    	}
    	// Ici on va voir comment faire du post
    	xhr.open("POST","ajaxdepartment.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('region');
    	idesp = sel.options[sel.selectedIndex].value;
    	xhr.send("idregion="+idregion);
    }
    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
    <TR>
    	<TD><font face="Verdana" size="2">Country:</font></TD>
    	<TD>
    		<select name='country' id='country' onchange='go()'>
    			<option value='-1'>Choose a country</option>
    <?PHP
    $res = mysql_query("SELECT idcountry, country, idcontinent FROM gd_loccountries ORDER BY country ASC");
    while($row = mysql_fetch_assoc($res)){
    	echo "<option value='".$row["idcountry"]."'>".$row["country"]."</option>";
    }
    >
    		</select>
    	</TD>
    </TR>
    <TR>
    	<TD><font face="Verdana" size="2">County / Region:</font></TD>
    	<TD>
    		<div id='regions' style='display:inline'>
    			<select name='region' id='region'>
    				<option value='-1'>Choose a region</option>
    			</select>
    		</div>
    	</TD>
    </TR>

    voilà le ajaxregion.php:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    echo "<select name='region'  id='region' onchange='godep()'>";
    if(isset($_REQUEST["idcountry"])){
    	$res = mysql_query("SELECT idregion, region, idcountry FROM gd_locregions WHERE idcountry=".$_REQUEST["idcountry"]." ORDER BY region ASC");
    	while($row = mysql_fetch_assoc($res)){
    		echo "<option value='".$row["idregion"]."'>".$row["region"]."</option>";
    	}
    }
    else
    	echo "<option value='-1'>Choose the region</option>";
    echo "</select>";
    ?>

    et le ajaxdepartment.php:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    echo "<select name='department'  id='department''>";
    if(isset($_REQUEST["idregion"])){
    	$res = mysql_query("SELECT iddepartment, department, idregion FROM gd_locdepartment WHERE idregion=".$_REQUEST["idregion"]." ORDER BY department ASC");
    	while($row = mysql_fetch_assoc($res)){
    		echo "<option value='".$row["iddepartment"]."'>".$row["department"]."</option>";
    	}
    }
    else
    	echo "<option value='-1'>Choose the department</option>";
    echo "</select>";
    ?>

    Le SELECT Pays fonctionne correctement, il va chercher bêtement via la requête les pays, jusque là tout va bien...
    Seulement, lorsque j'en choisis un, le SELECT Region se vide, il n'y a même plus l'option "Choose..."

    Remarque, les requêtes utilisées ont été testées individuellement et elle retourne un résultat et fonctionne correctement.

    D'où vient le problème ? entre la chaise et le clavier ?

    Merci d'avance pour votre aide.

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    1-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('region').innerHTML = leselect;
    C'est l'innerHTML du div que tu dois modifier, pas celui du select.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('regions').innerHTML = leselect;
    2-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    idesp = sel.options[sel.selectedIndex].value;
    				xhr.send("idregion="+idregion);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    idesp = sel.options[sel.selectedIndex].value;
    				xhr.send("idregion="+idesp);
    A+.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juin 2011
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    j'ai modifié comme suit mais ça ne fonctionne toujours pas

    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
    var xhr = null; 
    function getXhr(){
    	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; 
    	} 
    }
    /**
    * Méthode qui sera appelée sur le click du bouton
    */
    function go(){
    	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('regions').innerHTML = leselect;
    		}
    	}
    	// Ici on va voir comment faire du post
    	xhr.open("POST","ajaxregion.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('country');
    	idco = sel.options[sel.selectedIndex].value;
    	xhr.send("idcountry="+idco);
    }
    function goreg(){
    	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('departments').innerHTML = leselect;
    		}
    	}
    	// Ici on va voir comment faire du post
    	xhr.open("POST","ajaxdepartment.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('region');
    	idreg = sel.options[sel.selectedIndex].value;
    	xhr.send("idregion="+idreg);
    }

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<select name='region'  id='region' onchange='godep()'>";
    A+.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juin 2011
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    quel est le problème là ?

    le onchange appelle une autre fonction que goreg

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Tu ne vois pas la différence?
    La 2ème fonction javascript que tu as est goreg() or que ton select appelle une fonction inexistante godep().

    A+.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juin 2011
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    voilà ce que cela donne donc:

    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
    var xhr = null; 
    function getXhr(){
    	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; 
    	} 
    }
    /**
    * Méthode qui sera appelée sur le click du bouton
    */
    function go(){
    	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('regions').innerHTML = leselect;
    		}
    	}
    	// Ici on va voir comment faire du post
    	xhr.open("POST","ajaxregion.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('country');
    	idco = sel.options[sel.selectedIndex].value;
    	xhr.send("idcountry="+idco);
    }
    function goreg(){
    	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('departments').innerHTML = leselect;
    		}
    	}
    	// Ici on va voir comment faire du post
    	xhr.open("POST","ajaxdepartment.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('region');
    	idreg = sel.options[sel.selectedIndex].value;
    	xhr.send("idregion="+idreg);
    }
    les listes SELECT:

    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
    <TR>
    	<TD><font face="Verdana" size="2">Country:</font></TD>
    	<TD>
    		<div id='countries'>
    			<select name='country' id='country' onchange='go()'>
    				<option value='-1'>Choose a country</option>
    <?PHP
    $res = mysql_query("SELECT idcountry, country, idcontinent FROM gd_loccountries ORDER BY country ASC");
    while($row = mysql_fetch_assoc($res)){
    	echo "<option value='".$row["idcountry"]."'>".$row["country"]."</option>";
    }
    ?>
    			</select>
    		</div>
    	</TD>
    </TR>
    <TR>
    	<TD><font face="Verdana" size="2">County / Region:</font></TD>
    	<TD>
    		<div id='regions' style='display:inline'>
    			<select name='region' id='region'>
    				<option value='-1'>Choose a region</option>
    			</select>
    		</div>
    	</TD>
    </TR>
    <TR>
    	<TD><font face="Verdana" size="2">Department:</font></TD>
    	<TD>
    		<div id='departments' style='display:inline'>
    			<select name='department' id='department'>
    				<option value='-1'>Choose a department</option>
    			</select>
    		</div>
    	</TD>
    </TR>

    ajaxregion.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
    	<TR>
    	<TD><font face="Verdana" size="2">Country:</font></TD>
    	<TD>
    		<div id='countries'>
    			<select name='country' id='country' onchange='go()'>
    				<option value='-1'>Choose a country</option>
    <?PHP
    $res = mysql_query("SELECT idcountry, country, idcontinent FROM gd_loccountries ORDER BY country ASC");
    while($row = mysql_fetch_assoc($res)){
    	echo "<option value='".$row["idcountry"]."'>".$row["country"]."</option>";
    }
    ?>
    			</select>
    		</div>
    	</TD>
    </TR>
    <TR>
    	<TD><font face="Verdana" size="2">County / Region:</font></TD>
    	<TD>
    		<div id='regions' style='display:inline'>
    			<select name='region' id='region'>
    				<option value='-1'>Choose a region</option>
    			</select>
    		</div>
    	</TD>
    </TR>
    <TR>
    	<TD><font face="Verdana" size="2">Department:</font></TD>
    	<TD>
    		<div id='departments' style='display:inline'>
    			<select name='department' id='department'>
    				<option value='-1'>Choose a department</option>
    			</select>
    		</div>
    	</TD>
    </TR>

    ajaxdepartment.php :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    echo "<select name='department'  id='department''>";
    if(isset($_REQUEST["idregion"])){
    	$res = mysql_query("SELECT iddepartment, department, idregion FROM gd_locdepartment WHERE idregion=".$_REQUEST["idregion"]." ORDER BY department ASC");
    	while($row = mysql_fetch_assoc($res)){
    		echo "<option value='".$row["iddepartment"]."'>".$row["department"]."</option>";
    	}
    }
    else
    	echo "<option value='-1'>Choose the department</option>";
    echo "</select>";
    ?>

    mais ça me retourne toujours un SELECT pour Régions qui est vide ...

  8. #8
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    1- Tu as mal posté le code pour ajaxregion.php.
    2- Utilise $_POST à la place de $_REQUEST.
    3- Modifie la structure des fonctions ajax de cette façon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if(xhr.readyState == 4){
    	if ( xhr.status == 200 ||  xhr.status == 0){
    		leselect = xhr.responseText;
    		document.getElementById('departments').innerHTML = leselect;
    	}
    	else{
    		alert ("erreur :"+xhr.status);
    	}
    }

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juin 2011
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    oui, pardon, voilà le ajaxregion.php

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    echo "<select name='region'  id='region' onchange='goreg()'>";
    if(isset($_REQUEST["idcountry"])){
    	$res = mysql_query("SELECT idregion, region, idcountry FROM gd_locregions WHERE idcountry=".$_REQUEST["idcountry"]." ORDER BY region ASC");
    	while($row = mysql_fetch_assoc($res)){
    		echo "<option value='".$row["idregion"]."'>".$row["region"]."</option>";
    	}
    }
    else
    	echo "<option value='-1'>Choose the region</option>";
    echo "</select>";
    ?>

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juin 2011
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    voilà ce que cela donne:

    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
    var xhr = null; 
    function getXhr(){
    	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; 
    	} 
    }
    /**
    * Méthode qui sera appelée sur le click du bouton
    */
    function go(){
    	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){
    			if ( xhr.status == 200 ||  xhr.status == 0){
    				leselect = xhr.responseText;
    				document.getElementById('regions').innerHTML = leselect;
    			}
    			else{
    				alert ("erreur :"+xhr.status);
    			}
    		}
    		// Ici on va voir comment faire du post
    		xhr.open("POST","ajaxregion.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('country');
    		idco = sel.options[sel.selectedIndex].value;
    		xhr.send("idcountry="+idco);
    	}
    	function goreg(){
    		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){
    			if ( xhr.status == 200 ||  xhr.status == 0){
    				leselect = xhr.responseText;
    				document.getElementById('departments').innerHTML = leselect;
    			}
    			else{
    				alert ("erreur :"+xhr.status);
    			}
    		}
    		// Ici on va voir comment faire du post
    		xhr.open("POST","ajaxdepartment.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('region');
    		idreg = sel.options[sel.selectedIndex].value;
    		xhr.send("idregion="+idreg);
    	}
    les listes:

    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
    <TR>
    	<TD><font face="Verdana" size="2">Country:</font></TD>
    	<TD>
    		<div id='countries'>
    			<select name='country' id='country' onchange='go()'>
    				<option value='-1'>Choose a country</option>
    <?PHP
    $res = mysql_query("SELECT idcountry, country, idcontinent FROM gd_loccountries ORDER BY country ASC");
    while($row = mysql_fetch_assoc($res)){
    	echo "<option value='".$row["idcountry"]."'>".$row["country"]."</option>";
    }
    ?>
    			</select>
    		</div>
    	</TD>
    </TR>
    <TR>
    	<TD><font face="Verdana" size="2">County / Region:</font></TD>
    	<TD>
    		<div id='regions' style='display:inline'>
    			<select name='region' id='region'>
    				<option value='-1'>Choose a region</option>
    			</select>
    		</div>
    	</TD>
    </TR>
    <TR>
    	<TD><font face="Verdana" size="2">Department:</font></TD>
    	<TD>
    		<div id='departments' style='display:inline'>
    			<select name='department' id='department'>
    				<option value='-1'>Choose a department</option>
    			</select>
    		</div>
    	</TD>
    </TR>

    ajaxregion.php

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    echo "<select name='region'  id='region' onchange='goreg()'>";
    if(isset($_POST["idcountry"])){
    	$res = mysql_query("SELECT idregion, region, idcountry FROM gd_locregions WHERE idcountry=".$_REQUEST["idcountry"]." ORDER BY region ASC");
    	while($row = mysql_fetch_assoc($res)){
    		echo "<option value='".$row["idregion"]."'>".$row["region"]."</option>";
    	}
    }
    else
    	echo "<option value='-1'>Choose the region</option>";
    echo "</select>";
    ?>

    ajaxdepartment.php

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    echo "<select name='department'  id='department'>";
    if(isset($_POST["idregion"])){
    	$res = mysql_query("SELECT iddepartment, department, idregion FROM gd_locdepartment WHERE idregion=".$_REQUEST["idregion"]." ORDER BY department ASC");
    	while($row = mysql_fetch_assoc($res)){
    		echo "<option value='".$row["iddepartment"]."'>".$row["department"]."</option>";
    	}
    }
    else
    	echo "<option value='-1'>Choose the department</option>";
    echo "</select>";
    ?>

    la liste Region ne se vide plus, mais ne se remplie pas avec le contenu de la requête dans ajaxregion.php, ça coince

  11. #11
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $res = mysql_query("SELECT idregion, region, idcountry FROM gd_locregions WHERE idcountry=".$_POST["idcountry"]." ORDER BY region ASC");

    A+.

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juin 2011
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    J'ai effectué la modification, mais le problème reste présent.

  13. #13
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Remplace ajaxregion.php par
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     if (isset($_POST["idcountry"])){
       $query = "SELECT idregion, region, idcountry FROM gd_locregions WHERE idcountry=".$_POST["idcountry"]." ORDER BY region ASC";
       echo $query;
    }
    et lance directement la requête obtenue sur phpMyadmin ou un ce que tu utilises pour administrer ta base de donées.

    A+.

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juin 2011
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    j'ai modifié le contenu de ajaxregion.php, ça ne change rien, la liste ne reçoit rien

    en éxécutant la requête directement dans phpMyAdmin:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT idregion, region, idcountry
    FROM gd_locregions
    WHERE idcountry =  "58"
    ORDER BY region ASC 
    LIMIT 0 , 30

    j'ai les bonnes réponses, la requête fonctionne

  15. #15
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    C'est la requête générée par le php (avec le echo) que j'ai dit que tu devais exécuter avec phpMyadmin pour une vérification, pas la requête que tu as utilisé dans phpMyadmin pour le mettre dans php. C'est pour vérifier si la bonne valeur a été posté par AJAX.
    Sinon installe firebug sur firefox et montre nous ce que donne la requête AJAX.

    A+.

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juin 2011
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    j'ai résolu le problème...

    ajaxregion.php ne pouvait pas renvoyer de résultats, c'est normal, la page ne s'identifiait pas pour lancer la requête.

    j'ai donc corrigé cela, les listes se remplissent avec le résultat de la requête.

    Encore merci de ton aide, et désolé pour la perte de temps

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juin 2011
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Je déterre légèrement le sujet, étant donné que je fais face à un autre sujet, celui de l'utilisation du résultat obtenu afin de l'injecter dans une bdd via INSERT.

    En effet, la liste déroulante fonctionne correctement, mais lors de l'envoi du formulaire, il ne récupère pas la valeur d'une des listes déroulantes découlant de la première. (toutes les autres données du formulaire sont envoyées correctement)

    Avez-vous une idée au problème ?

    Pour rappel, voilà les champs du formulaire concernés:

    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
    <TR>
    	<TD><font face="Verdana" size="2">Country:</font></TD>
    	<TD>
    		<div id='countries'>
    			<select name='country' id='country' onchange='go()'>
    				<option value='-1'>Choose a country</option>
    <?PHP
    $res = mysql_query("SELECT idcountry, country, idcontinent FROM gd_loccountries ORDER BY country ASC");
    while($row = mysql_fetch_assoc($res)){
            echo "<option value='".$row["idcountry"]."'>".$row["country"]."</option>";
    }
    ?>
    			</select>
    		</div>
    	</TD>
    </TR>
    <TR>
    	<TD><font face="Verdana" size="2">County / Region:</font></TD>
    	<TD>
    		<div id='regions' style='display:inline'>
    			<select name='region' id='region'>
    				<option value='-1'>Choose a region</option>
    			</select>
    		</div>
    	</TD>
    </TR>
    <TR>
    	<TD><font face="Verdana" size="2">Department:</font></TD>
    	<TD>
    		<div id='departments' style='display:inline'>
    			<select name='department' id='department'>
    				<option value='-1'>Choose a department</option>
    			</select>
    		</div>
    	</TD>
    </TR>

    Si je souhaite récupérer country, cela se fait sans problèmes, par contre pour region ou department, impossible...

    Voilà le code chargé pour department dans une page annexe:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    echo "<select name='department'  id='department'>";
    if(isset($_REQUEST["idregion"])){
    	$res = mysql_query("SELECT iddepartment, department, idregion FROM gd_locdepartment WHERE idregion=".$_REQUEST["idregion"]." ORDER BY department ASC");
    	while($row = mysql_fetch_assoc($res)){
    		echo "<option value='".$row["iddepartment"]."'>".$row["department"]."</option>";
    	}
    }
    else
    	echo "<option value='-1'>Choose the department</option>";
    echo "</select>";

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/09/2017, 07h49
  2. Réponses: 2
    Dernier message: 09/10/2015, 17h44
  3. Réponses: 8
    Dernier message: 01/07/2011, 16h39
  4. Réponses: 1
    Dernier message: 04/06/2007, 10h23
  5. select qui s' adapte a un autre select
    Par valche5 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/05/2007, 22h32

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