[RESOLU] Afficher une valeur dans une liste déroulante

Petit nouveau ! | 5 Messages

26 mars 2013, 13:38

Bonjour,

J'ai une base MySql avec 2 tables : formation et instructeurs

Dans la table formation, un champ NOM et un champ INSTR

Sans problème j'affiche cette table sous forme de tableau dans une page.

Par contre lorsque je souhaite modifier un enregistrement, j'ouvre une autre page dans laquelle j'affiche un tableau avec les données. Je souhaite pouvoir proposer la modification des instructeurs sous forme d'une liste déroulante qui prendrait pour valeur celle déjà assignée. Et là je coince !!!! Ex: si DUPONT a pour instructeur Toto, que le selected de la liste soit sur Toto.

Voici mon code sachant que je récupère la variable $elv avec la fonction POST

Code : Tout sélectionner

<?php $SQL_INSTR = "SELECT instructeurs.INSTR, formation.INSTR FROM instructeurs, formation WHERE instructeurs.INSTR=formation.INSTR AND formation.NOM = '$elv'"; $res_instr = mysql_query($SQL_INSTR)or die("Pb avec la requete INSTR ".mysql_error()); echo '<select size=1 name="instr" >'."\n"; echo "<option value=".$val_instr["INSTR"].">".$val_instr["INSTR"]."</option>\n"; $i=0; while ($val_instr= mysql_fetch_array($res_instr)){ echo '<option value="'.$val_instr['INSTR'].'">'.$val_instr['INSTR']; echo '</option>'."\n"; $i++; } echo '</select>'."\n"; ?>
Merci d'avance de votre aide

Mammouth du PHP | 571 Messages

26 mars 2013, 14:36

bonjour,
il te faut l'attribut selected pour pouvoir déterminer un choix par défaut.
je suppose que $val_instr['NOM'] recupère le nom de l'élève(ex:dupond)?
<?php
$SQL_INSTR = "SELECT instructeurs.INSTR, formation.INSTR,formation.NOM
FROM instructeurs, formation
WHERE instructeurs.INSTR=formation.INSTR AND formation.NOM = '$elv'";

$res_instr = mysql_query($SQL_INSTR)or die("Pb avec la requete INSTR ".mysql_error());
 $selected = '';
echo '<select size=1 name="instr" >'."\n";
 
$i=0;
while ($val_instr= mysql_fetch_array($res_instr)){
//le nom de l'élève en bd est-il le même que celui reçu en $_POST?
//si oui on selectionne  l'instructeur dont le nom de l'élève a été renseigné
$selected = ($val_instr['NOM']==$elv) ? " selected " : ""; 

echo '<option value="', $val_instr['INSTR'] ,'"', $selected ,'>', $val_instr['INSTR'] ,'</option>',"\n";

echo '</option>'."\n";
$i++;
}


echo '</select>'."\n";
?>
n'oublies pas de déclarer ton formulaire (avec les balises <form> </form>) pour récupérer la valeur selectionnée

Mammouth du PHP | 571 Messages

26 mars 2013, 15:06

en fait dans la balise select tu auras 2 catégories d'options:
1/la 1ère selectionne la valeur par défaut(déjà fait)
2/la 2ème sélectionnera tous les instructeurs .
pour afficher tous les instructeurs, tu fais une nouvelle requête qui extrait l'ensemble des instructeurs de ta bd.

Pour la 1ère option qui affiche l'instructeur par défaut y a pas besoin de boucler.

<?php
$SQL_INSTR = "SELECT instructeurs.INSTR, formation.INSTR,formation.NOM
FROM instructeurs, formation
WHERE instructeurs.INSTR=formation.INSTR AND formation.NOM = '$elv'";

$queryInst="SELECT * FROM instructeurs";
$res=mysql_query($queryInst)or die("Pb avec la requete INSTR ".mysql_error());

$res_instr = mysql_query($SQL_INSTR)or die("Pb avec la requete INSTR ".mysql_error());
$val_instr= mysql_fetch_array($res_instr);


 $selected = '';
echo '<select size=1 name="instr" >'."\n";
 
$i=0;

$selected = ($val_instr['NOM']==$elv) ? " selected " : "";
echo '<option value="', $val_instr['INSTR'] ,'"', $selected ,'>', $val_instr['INSTR'] ,'</option>',"\n";
while ($dataIns= mysql_fetch_array($res)){
echo '<option value="', $dataIns['INSTR'] , '"' ,'>', $dataIns['INSTR'] ,'</option>',"\n";
}

 echo '</select>'."\n";
tu vérifies si j'ai pas fais d'erreurs

Petit nouveau ! | 5 Messages

26 mars 2013, 15:09

bonjour,
il te faut l'attribut selected pour pouvoir déterminer un choix par défaut.
je suppose que $val_instr['NOM'] recupère le nom de l'élève(ex:dupond)?
<?php
$SQL_INSTR = "SELECT instructeurs.INSTR, formation.INSTR,formation.NOM
FROM instructeurs, formation
WHERE instructeurs.INSTR=formation.INSTR AND formation.NOM = '$elv'";

$res_instr = mysql_query($SQL_INSTR)or die("Pb avec la requete INSTR ".mysql_error());
 $selected = '';
echo '<select size=1 name="instr" >'."\n";
 
$i=0;
while ($val_instr= mysql_fetch_array($res_instr)){
//le nom de l'élève en bd est-il le même que celui reçu en $_POST?
//si oui on selectionne  l'instructeur dont le nom de l'élève a été renseigné
$selected = ($val_instr['NOM']==$elv) ? " selected " : ""; 

echo '<option value="', $val_instr['INSTR'] ,'"', $selected ,'>', $val_instr['INSTR'] ,'</option>',"\n";

echo '</option>'."\n";
$i++;
}


echo '</select>'."\n";
?>
n'oublies pas de déclarer ton formulaire (avec les balises <form> </form>) pour récupérer la valeur selectionnée
Merci pour ta réponse rapide qui résout partiellement le problème.

Pour répondre à ta question :
je suppose que $val_instr['NOM'] recupère le nom de l'élève(ex:dupond)? La réponse est NON.
J'avais précisé le contenu de la table Formation avec 2 champs : NOM et INSTR, et j'ai oublié de préciser le contenu de la table instruction qui ne comporte qu'un champ : INSTR
Donc l'instructeur récupéré dans la table formation s'affiche parfaitement dans la liste déroulante, mais le HIC, c'est que cette liste ne comport qu'un seul enregistrement. Or ce que je souhaite c'est avoir la liste complète de tous les instructeurs positionnée sur celui qui est affecté à l'élève.

Ex: Si Dupont a pour instructeur Toto, je veux que mon formulaire affiche Dupont et à côté une liste déroulante dans laquelle figurent Toto, titi, etc ... positionné sur Toto.

Je pense que c'est ma requête qui est mal formulée, puisqu'elle ne cible qu'un seul enregistrement.

Petit nouveau ! | 5 Messages

26 mars 2013, 15:17

Merci beaucoup, malgré les messages qui se croisent, ça fonctionne à présent.

Mammouth du PHP | 571 Messages

26 mars 2013, 19:13

:D