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.