Mémoriser valeurs d'un select multiple

Eléphanteau du PHP | 47 Messages

30 janv. 2011, 19:33

Bonjour,

J'utilise un code permettant de faire passer des éléments d'une première liste de type <select> à une autre liste du même type :

Code : Tout sélectionner

<script language="JavaScript" type="text/javascript"> /*<![CDATA[*/ /* Codes originels © DR. Killeak : corrections pour compatibilite avec IE 6 et 7, Firefox 2 et Safari 2. */ /* deplacer( liste_depart, liste_arrivee ) Déplace depuis la liste de départ (argument 1) et à destination de la liste d'arrivée (argument 2) le ou les éléments sélectionnés par l'utilisateur, l'ajout se faisant à la suite des éléments déjà présents dans la liste d'arrivée. */ function deplacer( liste_depart, liste_arrivee ) { for( i = 0; i < liste_depart.options.length; i++ ) { if( liste_depart.options[i].selected && liste_depart.options[i] != "" ) { o = new Option( liste_depart.options[i].text, liste_depart.options[i].value ); liste_arrivee.options[liste_arrivee.options.length] = o; liste_depart.options[i] = null; i = i - 1 ; } else { // alert( "aucun element selectionne" ); } } } /* soumettre_1liste( liste ) Au moment de la soumission du formulaire, sélectionne automatiquement toutes les valeurs de la liste donnée indiquée dans l'argument, afin que les valeurs choisies soit récupérées dans le script de traitement. */ function soumettre_1liste( liste ) { var listelen = liste.length; for( i = 0; i < listelen; i++ ) { liste.options[i].selected = true; } } //--> /*]]>*/ </script>
<form name="export" method="post" onsubmit="soumettre_1liste( document.forms[0].choix );"action="">

<select name="dispo[]" id="dispo" style="width: 210px;" size="16" multiple="multiple" OnDblClick="javascript: deplacer( this.form.dispo, this.form.choix );">
<!--liste de départ-->


        <?php 
 $requete_genres = "SELECT G.ID_GENRE,G.NOM_GENRE
 FROM GENRE G
 ORDER BY G.NOM_GENRE ASC
 ";
 
 $resultat_genres = mysql_query($requete_genres) or die('Erreur SQL !'.$requete_genres.'<br>'.mysql_error());
	
 
	while($data_genres = mysql_fetch_assoc($resultat_genres))
	
		
		{
 
echo '<option value="'.$data_genres['ID_GENRE'].'">'.$data_genres['NOM_GENRE'].'</option>';
//affichage dynamique de la liste des genres : opérationnel
 
}
 
?>	

</select>
    
<select name="choix[]" id="choix" style="width: 210px;" size="16" multiple="multiple" OnDblClick="javascript: deplacer( this.form.choix, this.form.dispo );">
<!--liste d'arrivée générée par le javascript-->

</select>
<input type="submit" value="OK"name="btSubmit2" /> 
</form>
Je récupère ensuite toutes les values rapatriées dans la liste d'arrivée grâce au code suivant :
(isset($_POST["choix"]))?$PickList_insert = $_POST["choix"]:
$PickList_insert = array();
/* var_dump($_POST["PickList"]); */
foreach($PickList_insert as $genres) {



$sql = 'INSERT INTO `thematise` (`id_genre`, `id_livre`) VALUES("'. mysql_real_escape_string(trim($genres)).'","'. mysql_real_escape_string(trim($numero_insere)).'" )'; 
mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error());  }
Le système de bascule fonctionne et ma requête fonctionne correctement. Mais je bute au niveau de la conservation de l'affichage des valeurs sélectionnées après la soumission du formulaire. Mon code PHP (non reproduit ici) vérifie après la soumission si tous les champs de mon formulaire ont bien été complétés ou sélectionnés. A défaut mon formulaire se réaffiche pour permettre à l'utilisateur de le compléter.
Dans le système de bascule actuel, après la soumission du formulaire, les valeurs rapatriées dans la liste d'arrivée ne sont pas conservées, ce qui oblige l'utilisateur à refaire ses sélections en cas de formulaire incomplet. A noter que si je regarde le code source de la page avant soumission du formulaire, il n'y a pas de <option value> affiché alors qu'il est bien sélectionné sur la page. Mais si j'inspecte avec firebug, les <option value> sélectionnées sont bien identifiées.
Compte tenu de tout ce qui précède, voyez-vous un moyen de réafficher les valeurs sélectionnées dans le select multiple après la soumission du formulaire ? Merci de votre aide.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

30 janv. 2011, 19:49

salut,

la seule solution est de gérer cela à partir de javascript (parce que la liste est entièrement générer par JS). Il te faut passer au code JS la valeur à mettre en selected.


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 47 Messages

30 janv. 2011, 21:45

Merci pour ta réponse. Je me doutais un peu qu'il fallait passer par JS. Par contre je ne connais pas du tout ce langage. Voyez-vous comment faire pour arriver au résultat escompté ? Mais peut-être dois-je poster sur le forum ad hoc. Merci pour tout aide complémentaire.