Page 1 sur 1

Problème de listes déroulantes

Posté : 25 août 2005, 14:46
par leeloo1902
Bonjour,

J'ai pris pour exemple votre code en php sur cette page :
http://www.phpfrance.com/forums/voir_su ... E9roulante

afin de créer mes propres déroulantes.
La 1ère liste fonctionne bien mais la seconde ne s'affiche pas.

Voici mon code :
<?php 
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n"); 
/* Variables de connexion : ajustez ces paramètres selon votre propre environnement */ 
$serveur = "localhost"; 
$admin   = "root"; 
$mdp     = ""; 
$base    = "Physique"; 
/* On récupère si elle existe la valeur du semestre envoyée par le formulaire */ 
$ids = isset($_POST['Numsem'])?$_POST['Numsem']:null; 
?> 
<!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" xml:lang="fr"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" /> 
<title>Sélectionner un département selon la région choisie</title> 
<meta name="description" content="Listes déroulantes dynamiques inter-dépendantes" /> 
<meta name="keywords" content="" /> 
<meta name="author" content="Cyrano" /> 
<meta name="generator" content="Zend Studio Environnement et WebExpert 5" /> 
<meta http-equiv="imagetoolbar" content="no" /> 
<meta http-equiv="Pragma" content="no-cache" /> 
</head> 
<body style="font-family: verdana, helvetica, sans-serif; font-size: 85%"> 
<?php 
if(isset($_POST['ok']) && isset($_POST['IdMention']) && $_POST['IdMention'] != "") 
{ 
    $sem_selectionne = $_POST['Numsem']; 
    $ment_selectionne = $_POST['IdMention']; 
?> 
<p>Vous avez sélectionné la mention <?php echo($ment_selectionne); ?> dans le semestre <?php echo($sem_selectionne); ?></p> 
<?php 
} 
?> 
<h3>Trouver une mention</h3> 
<?php 
/* On établit la connexion à MySQL avec mysql_pconnect() plutôt qu'avec mysql_connect() 
*  car on aura besoin de la connexion un peu plus loin dans le script */ 
$connexion = mysql_pconnect($serveur, $admin, $mdp); 
if($connexion != false) 
{ 
    $choixbase = mysql_select_db($base, $connexion); 
    $sql1 = "SELECT `Numsem`". 
    " FROM `semestre`". 
    " ORDER BY `Numsem`"; 
    $rech_sem = mysql_query($sql1); 
    $sem = array(); 
    /* On active un compteur pour les semestres */ 
    $nb_sem = 0; 
    if($rech_sem != false) 
    { 
        while($ligne = mysql_fetch_assoc($rech_sem)) 
        { 
            array_push($sem, $ligne['Numsem']); 

            /* On incrémente de compteur */ 
            $nb_sem++; 
        } 
    } 
    ?> 
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgment"> 
<fieldset style="border: 3px double #333399"> 
<legend>Sélectionnez un semestre</legend> 
<select name="semestre" id="semestre" onchange="document.forms['chgment'].submit();"> 
  <option value="-1">- - - Choisissez un semestre - - -</option> 
    <?php 
    for($i = 0; $i < $nb_sem; $i++) 
    { 
?> 
  <option value="<?php echo($sem[$i]); ?>"<?php echo((isset($ids) && $ids == $sem[$i])?" selected=\"selected\"":null); ?>><?php echo($sem[$i]); ?></option> 
<?php 
    } 
    ?> 
</select> 
    <?php 
    mysql_free_result($rech_sem); 
    /* On commence par vérifier si on a envoyé un numéro de semestre et le cas échéant s'il est différent de -1 */ 

    if(isset($ids) && $ids != -1) 
    { 
        /* Création de la requête pour avoir les mentions de ce semestre */ 
		if ($ids == 'S1' or $ids == 'S2')
		{
          $sql2 = "SELECT `IdMention`". 
          " FROM `mention`". 
          " WHERE `Annee` = '1A' ;"; 
		}
		else
		if ($ids == 'S3' or $ids == 'S4')
		{
          $sql2 = "SELECT `IdMention`". 
          " FROM `mention`". 
          " WHERE `Annee` = '2A' ;"; 
		}
		else
		if ($ids == 'S5' or $ids == 'S6')
		{
          $sql2 = "SELECT `IdMention`". 
          " FROM `mention`". 
          " WHERE `Annee` = '3A' ;"; 
		}
        if($connexion != false) 
        { 
            $rech_ment = mysql_query($sql2, $connexion); 
            /* Un petit compteur pour les départements */ 
            $nm = 0; 
            /* On crée deux tableaux pour les numéros et les noms des mentions */ 
            $Id_ment = array(); 
            $nom_ment = array(); 
            /* On va mettre les numéros et noms des mentions dans les deux tableaux */ 
            while($ligne_ment = mysql_fetch_assoc($rech_ment)) 
            { 
                array_push($Id_ment, $ligne_ment['IdMention']); 
                array_push($nom_ment, $ligne_ment['NomMention']); 
                $nm++; 
            } 
            /* Maintenant on peut construire la liste déroulante */ 
            ?> 
<select name="mention" id="mention"> 
            <?php 
            for($m = 0; $d<$nm; $m++) 
            { 
                ?> 
  <option value="<?php echo($Id_ment[$m]); ?>"<?php echo((isset($ment_selectionne) && $ment_selectionne == $Id_ment[$m])?" selected=\"selected\"":null); ?>><?php echo($nom_ment[$m]." (". $Id_ment[$m] .")"); ?></option> 
                <?php 
            } 
?> 
</select> 
<?php 
        } 
        /* Un petit coup de balai */ 
        mysql_free_result($rech_ment); 
    } 
?> 
<br /><input type="submit" name="ok" id="ok" value="Envoyer" /> 
</fieldset> 
</form> 
<?php 
    /* Terminé, on ferme la connexion */ 
    mysql_close($connexion); 
} 
else 
{ 
    /* Si on arrive là, c'est pas bon signe, il faut vérifier les 
    * paramètres de connexion, mot de passe, serveur pas démarré etc... */ 
?> 
<p>Un incident s'est produit lors de la connexion à la base de données, veuiillez essayer à nouveau ultérieurement.</p> 
<?php 
} 
?> 
</body> 
</html>
Savez-vous ce qui se passe ?

Merci beaucoup

Posté : 25 août 2005, 14:55
par Cyrano
Il faut vérifier si tu récupères des informations: dans la boucle while où tu construis ton tableau $sem, juste après l'accolade de fermeture du while mais avant celle de fermeture du if(), insère ces quelques lignes et vois si tu as quelque chose qui s'affiche; Si oui, le problème est après, sinon, il est avant et on va cerner le problème petit à petit.
        echo("<pre>");
        var_dump($sem);
        echo("</pre>");

Posté : 26 août 2005, 14:15
par leeloo1902
ça ne fonctionne pa, rien ne s'affiche. donc le problème doit être avant.
Cependant, j'ai beau chercher, je ne vois pas ou.
Si vous pouviez m'aidez...

Merci

Posté : 29 août 2005, 12:56
par Invité
Ca ne fonctionne toujours pas.
S'il vous plait aidez moi.

Posté : 29 août 2005, 13:29
par Cyrano
On va vérifier que la connexion fonctionne correctement. Au début du script, modifie la ligne comme suit:
$connexion = mysql_pconnect($serveur, $admin, $mdp) or die("<h3>Connexion impossible au serveur de base de données</h3>"); 
Si la phrase mise en paramètre de die() s'affiche, vérifie tes paramètres de connexion, sinon, on va avancer eu peu plus loin dans le code.