Récupérer données d'un champ Mysql dans une liste déroulante

Bonjour à tous

Je lance mon problème en espérant attirer l’attention d’un méga pro :slight_smile:
Voila ce que j’essaye de faire :

J’entre des données dans un formulaire HTML multi-champs, le tout est stocké en Mysql.
Dans ce formulaire il y a une liste déroulante qui affiche des données provenant d’UN AUTRE TABLE que le reste du formulaire. L’ajout se passe bien, l’affichage également. Mais quand je retourne dans ce formulaire pour modifier les entrées, tous les champs sont bien transmits, SAUF la liste déroulante qui est toujours réinitialisée (c-a-d quelle affiche le premier élément de la liste, et non celui que j’avais sélectionné lors du premier ajout)

Voici le code de ma liste déroulante:


<?php
	$reponse = mysql_query("SELECT id,title FROM collection_item_tracklist WHERE type = 'album' ORDER BY type,title ASC");
	 
	
	echo '<select name="tracklist">';
		while ($donnees = mysql_fetch_array($reponse) )
		{
			echo '<option value="'.$donnees['id'].'">'.$donnees['title'].'</option>';
			
		}
	echo '</select>';
?>

Il y a évidemment un autre requête pour le reste des champs du formulaire, car ils proviennent tous du même champ, SAUF ce truc de tracklist juste au dessu. Pouvez-vous m’aider pour que cette liste déroulante affiche le bon élément lorsque je retourne dans le formulaire pour le modifier? :slight_smile:
Edité le 16/05/2010 à 17:08

C’est à toi de le gérer ça, ce n’est pas magique.

Je ne sais pas comment tu génères ta ou tes listes, mais si tu as une variable POST ou GET “list1_id”, dans ce cas là, ça sera :

echo '<option value="', $donnees['id'], '"', ($_GET['list1_id'] == $donnees['id'] ? ' selected="selected"':''), '>', $donnees['title'], '</option>';

Je suis pas un pro du php/mysql, même si je me démerde pas mal en tripottant. Sauf que la c’est quand même assez technique et ca dépasse mes compétances.

Sinon, ta ligne ne fait pas d’erreur, mais ne change rien non plus. la liste des tracklist affiche toujours le premier élément de la liste =/ et je ne comprend pas bien à quoi correspond le [‘list1_id’]. J’ai essayé en avec [‘collection_item_tracklist_id’] mais ca ne donne rien non plus


		echo '<select name="tracklist">';
		
		$sql3 = mysql_query("SELECT id, title FROM collection_item_tracklist WHERE type = 'album' ORDER BY type,title ASC");
        while (list($id, $title) = mysql_fetch_row($sql3))
        {
		echo '<option value="'. $id .'">'. $title .'</option>';
		}
		
		echo '</select>';

Edité le 17/05/2010 à 00:32

Ca n’a toujours pas l’air de fonctionner
Edité le 17/05/2010 à 00:41

Je ne sais pas si ça dépasse le cadre de tes compétences, mais je suis parti du principe que tu avais plusieurs listes déroulantes, avec la première qui déterminait le contenu de la seconde, et ainsi de suite… Dans ce cas, je suppose que dans ton javascript (ou autre), tu passe un identifiant correspondant à ce qui a été choisi dans la première liste; dans ce cas, tu dois te baser sur cet identifiant pour indiquer au navigateur - via l’attribut selected - quel élément est actuellement sélectionné.

ce que j’ai aussi omis de dire (je ne sais pas si ca a son importance), c’est que l’appel de données à modifier se fait en fonction d’un id (par exemple url : album.php?modifier_collection_item_form=215)

La requete principale pour tout le formulaire est

SELECT * FROM collection_item_form WHERE id=\'' . $_GET['modifier_collection_item_form'] . '\'

La difficulté est donc d’afficher le bon élément dans la liste déroulante, qui provient d’une autre table dans la db, en fonction de l’id mentionné…
Edité le 17/05/2010 à 01:41

j’ai réussi à faire quelque chose. J’ai fais des test, et il remet bien l’élément sélectionné au chargement du formulaire. Le problème est que je n’ai pas réussi à le faire avec les données de ma base de donnée. Dans array(‘xxxxxx’), à la place des xxxxxx il faudrai mettre un truc comme ’ . $title .’ pour afficher les titres depuis ma db, mais j’ai pas trouvé la bonne sémantique.


<select name="tracklist">

<?php
    $reponse = mysql_query("SELECT id,title FROM collection_item_tracklist WHERE type = 'album' ORDER BY type,title ASC");
    while ($donnees = mysql_fetch_array($reponse) )
    {
    $tab_tracklist = array('xxxxxx');
?>

    <?php
        for($i=0;$i<count($tab_tracklist);$i++)
        {
        if($tab_tracklist[$i] == $tracklist)
        { $selected = ' selected="selected"'; }
        else { $selected = ''; }
    ?> 
    <option value="<?php echo $tab_tracklist[$i];?>"<?php echo $selected;?>><?php echo $tab_tracklist[$i]; ?></option>
    <?php
    }
    }
    ?>
</select>

Dans option value il faudrai trouver le moyen de mettre l’id… Peut-être que apres ca ca marcherai :stuck_out_tongue: