Problème de listes déroulantes

Petit nouveau ! | 6 Messages

25 août 2005, 14:46

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

Mammouth du PHP | 19672 Messages

25 août 2005, 14:55

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>");
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 6 Messages

26 août 2005, 14:15

ç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

Invité
Invité n'ayant pas de compte PHPfrance

29 août 2005, 12:56

Ca ne fonctionne toujours pas.
S'il vous plait aidez moi.

Mammouth du PHP | 19672 Messages

29 août 2005, 13:29

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: