Récupération de données pour des champs Select et Checkbox

Petit nouveau ! | 1 Messages

06 juil. 2010, 12:08

Bonjour à toutes et tous,

Après 2 bonnes heures à chercher une solution sur différents forums je m'incline et sollicite votre aide :shock:

J'ai un formulaire tout beau tout propre pour insérer des données dans une base. Jusque là rien de très compliqué. Via l'admin créée je propose de modifier les entrées.

Or là, lorsque l'on clique sur Modifier, on arrive sur le même formulaire (et même page PHP que pour l'insertion) avec les infos pré-remplies. Reste plus qu'à modifier les champs voulus.

Sauf que j'arrive à faire apparaître les champs pré-remplis Input, Radio et Textarea mais pas les champs Select et Checkbox.

Quelqu'un a sûrement déjà rencontré ce cas :-)

Voici un exemple de mon code :
<?php
if (isset($_GET['modifier_invit'])) 
{
    $retour = mysql_query('SELECT * FROM invit WHERE id=' . $_GET['modifier_invit']);
    $donnees = mysql_fetch_array($retour);
    $numero = $donnees['numero'];
    $invitation = $donnees['invitation'];
    $album = $donnees['album'];
    $id_invit = $donnees['id']; 
}
else 
{	$numero = '';
	$invitation = '';
	$album= '';
} 
?>
<form action="liste.php" method="post" enctype="multipart/form-data">
<INPUT TYPE=HIDDEN NAME=MAX_FILE_SIZE VALUE=10240000 />
Numero  : <input type="text" name="numero" value="<?php echo $numero; ?>" />
<br />
<b>Album :</b> <br />
<select name="album" >
<option selected></option>
<?php
$retour2 = mysql_query('SELECT * FROM albums ORDER BY code');
while ($donnees2 = @mysql_fetch_array($retour2))
{
?>
<option value="<?php echo $donnees2['code']; ?>"><?php echo $donnees2['titre']; ?></option>  
<?php
}
?>
</select> 
<br />
<b>Invitation :</b> <input type="text" name="invitation" value="<?php echo $invitation; ?>" />

etc...
Maintenant il faut que le choix inscrit dans la BDD soit déjà sélectionné si on décide de modifier l'article. Car actuellement rien n'est pré-selectionné et donc si on modifie un champ et qu'on oublie de sélectionner à nouveau, le champ s'enregistre vide... J'espère ne pas être trop confuse ;-)

Merci d'avance pour votre aide et votre temps !!!

Camomille

Mammouth du PHP | 881 Messages

06 juil. 2010, 14:50

Effectivement, j'ai l'impression de ne pas tout saisir. D'une part tu parles d'enregistrement, d'autre part tu donnes du code de lecture et non d'enregistrement.

Disons ici que deux petites règles de discipline peuvent t'aider ici et ailleurs.
1) tu définies tes valeurs par défaut avant de donner aux variables des valeurs définies
2) tu gardes les variables dans le même ordre pour plus de facilité de repérage
Ça donne:

Code : Tout sélectionner

<?php $numero = ''; $invitation = ''; $album= ''; if (isset($_GET['modifier_invit'])) { $retour = mysql_query('SELECT * FROM invit WHERE id=' . $_GET['modifier_invit']); $donnees = mysql_fetch_array($retour); $numero = $donnees['numero']; $invitation = $donnees['invitation']; $album = $donnees['album']; $id_invit = $donnees['id']; } ?>
Pour ton <select> ... il est toujours utile de mettre une valeur que tu pourras traiter dans la première ligne et de bon aloi d'y écrire quelque chose comme

Code : Tout sélectionner

<option value="0">--- veuillez choisir ---</option>
Dans ton code, il y a aussi l'inscription "selected" dans la ligne vierge qui commence le <select>, c'est là que tu donnes ta valeur par défaut et celle-ci est vide, c'est pourquoi si l'usager ne fait rien l'envoi du formulaire te donne une valeur vide.

Il serait pertinent d'y mettre la valeur obtenue de ta base de données comme ceci:

Code : Tout sélectionner

<select name="album" > <option selected value="<?php echo $numero; ?>"><?php echo $album?></option>
De la sorte, l'option retenue dans la (ou la valeur par défaut définie plus haut) sera attribuée à ta liste.
Le reste du code peut rester intact.

Joignant les deux parties de ce message, on pourrait penser qu'il soit intéressant d'avoir des valeurs par défaut plus utiles que du vide. Voici une suggestion:

Code : Tout sélectionner

$numero = 0; $album = "--- veuillez choisir ---";
Tu parles aussi de checkbox, mais je n'en vois pas d'exemple.
Soyez artisans de paix