Boites déroulantes dépendantes

Petit nouveau ! | 3 Messages

03 août 2007, 10:07

Bonjour à tous,
J'alimente 2 boites déroulantes (nom et prénom) à l'aide de requêtes Mysql, la deuxième dépendant du choix effectué sur la première. Les requêtes fonctionnent bien.
La mise à jour de la page s'effectue par un réaffichage (onChange='this.form.submit()). Les données sont transmises en POST. Or je ne récupère pas la valeur du deuxième champ ($_POST['prenom']) pourtant renseigné.
Et comme je teste l'éventuel contenu de chaque $_POST['variable'] pour positionner l'option "selected", je ne peux pas figer le choix effectué dans la deuxième boîte.

J'ai retourné le problème dans tous les sens et je ne comprends pas. :(
Vos lumières seront plus que bienvenues... :D Ci-dessous le code.

Merci d'avance

include_once 'fic/fic.php';
include_once 'fic/connexion.php';

echo "
<form name=\"contact\" method=\"POST\" action=\"index.php\">
<fieldset id=\"coordonnees\">
<legend>Vos coordonnées</legend>";

echo "
<select name='nom' onChange='this.form.submit()'>";
$req="select distinct nom from data";
$reqres=mysql_query($req) or dir ("Pb4");
while ($ligne=mysql_fetch_array($reqres)) {
extract ($ligne);
if ($nom!=$_POST['nom']) { echo "<option value='$nom'>$nom</option>"; }
else { echo "<option value=$nom SELECTED>$nom</option>"; $refNom=$nom; }
}
echo "</select>";

if(!empty($refNom)) {
echo "
<select name='prenom' onChange='this.form.submit()'>";
$req="select distinct prenom from data where nom='$refNom' order by prenom";
$reqres=mysql_query($req) or dir ("Pb4");
while ($ligne=mysql_fetch_array($reqres)) {
extract ($ligne);
if ($prenom!=$_POST['prenom']) { echo "<option value='$prenom'>$prenom</option>"; }
else { echo "<option value=$prenom SELECTED>$prenom</option>"; }
}
echo "</select>";
}
echo </fieldset>";
echo "</form>";


Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

03 août 2007, 10:20

Modération :
imedul, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ


Par ailleurs as-tu afficher la variable $_POST (avec un print_r() par exemple) pour vérifier que l'index prenom y est bien présent ?

Nota : tu as oublié de délimiter l'attribut value des options sélectionnés par défaut avec des apostrophes ou des guillemets. Si l'un des prénoms est composé ou contient un espace, tu perdras la moitié de sa valeur...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 3 Messages

03 août 2007, 11:07

edition:
J'ai fini par trouver. C'était un problème situé plus bas dans le code qui rendait le comportement instable...


Merci pour ta réponse
Modération :
imedul, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).
Désolé! J'y veillerai désormais.
Par ailleurs as-tu afficher la variable $_POST (avec un print_r() par exemple) pour vérifier que l'index prenom y est bien présent ?
Oui, et le comportement est bizarre.
exemple : J'ai 3 prénoms classés dans l'ordre (par la requête) : emilie, ludovic, pierre. Par défaut (avant sélection) c'est emilie qui est affiché. Si je sélectionne ludovic, c'est ok. Ensuite si je sélectionne pierre j'obtiens emilie et $_POST['prenom'] n'est pas renseigné. Et inversement si je choisis d'abord pierre, j'ai le même problème en sélectionnant ludovic.
Et enfin lorsque je sélectionne emilie (le premier de la liste), $_POST['prenom'] est systématiquement vide...
Ce qui est fou c'est que j'utilise exactement la même mécanique pour la sélection des noms, et je n'ai aucun problème !!
J'ai pensé à un problème de navigateur, mais non, avec Opéra ou firefox, j'obtiens le même comportement.
Nota : tu as oublié de délimiter l'attribut value des options sélectionnés par défaut avec des apostrophes ou des guillemets. Si l'un des prénoms est composé ou contient un espace, tu perdras la moitié de sa valeur...
Corrigé!
	
$br="<br />";	
include_once 'fic/fic.php';
include_once 'fic/connexion.php';

echo "Valeur  : ".$_POST['prenom'].$br;
print_r ($_POST['prenom']);

echo "
<form name="contact" method="POST" action="index.php">
    <fieldset id="coordonnees">
    <legend>Vos coordonnées</legend>";

    echo "
    <select name='nom' onChange='this.form.submit()'>";
    $req="select distinct nom from data";
    $reqres=mysql_query($req) or dir ("Pb4");
    while ($ligne=mysql_fetch_array($reqres)) {
        extract ($ligne);
        if ($nom!=$_POST['nom']) { echo "<option value='$nom'>$nom</option>"; }
        else { echo "<option value='$nom' SELECTED>$nom</option>"; $refNom=$nom; }		
    }
    echo "</select>";

    if(!empty($refNom)) {
        echo "
        <select name='prenom' onChange='this.form.submit()'>";
        $req="select distinct prenom from data where nom='$refNom' order by prenom";
        $reqres=mysql_query($req) or dir ("Pb4");
        while ($ligne=mysql_fetch_array($reqres)) {
            extract ($ligne);
            if ($prenom!=$_POST['prenom']) { echo "<option value='$prenom'>$prenom</option>"; }
            else { echo "<option value='$prenom' SELECTED>$prenom</option>"; $refPrenom=$prenom; }
        }	
        echo "</select>";
    }

    echo "</fieldset>";
echo "</form>";