Page 1 sur 2

Récupérer tous les éléments d'une liste

Posté : 09 juin 2005, 16:56
par hul
Bonjour,

Je voudrais pouvoir enregistrer tous les éléments d'une liste déroulante après avoir appuyer sur un bouton type "Submit".

Si quelqu'un peut m'aider ce serait sympa... :D

Posté : 09 juin 2005, 17:08
par Cyrano
Comment ça "tous" les éléments ? Ceux qui ont été sélectionnés ou tous ceux présents dans la liste ?

Posté : 09 juin 2005, 21:19
par hul
En fait, il s'agit d'enregistrer tous les éléments qu'ils soient sélectionnés ou non...

Merci pour vos réponses.

Posté : 09 juin 2005, 21:21
par Cyrano
l'intérêt m'échappe un peu, mais bon: comment est générée cette liste ? dynamiquement ou non ?

Posté : 10 juin 2005, 09:30
par hul
En gros j'ai une liste A et une liste B.

Dans la liste A, je sélectionne des éléments que je mets dans la liste B.

Ce sont les éléments de la liste B que je veux enregistrer.

Maintenant je ne crois pas que le fait de charger une liste dynamiquement ou non change quelquechose.

Posté : 10 juin 2005, 09:34
par Cyrano
Si ça change, parce que si cette liste est chargée dynamiquement, tu dispose des variables contenant chaque élément de cette liste, tandis que si tu a cette liste en dur dans ton code html, ça pose un autre genre de problème et la solution est plus probablement en JavaScript.

Posté : 10 juin 2005, 09:56
par hul
La liste est chargée dynamiquement.

Posté : 10 juin 2005, 09:58
par Cyrano
Donc les valeurs sont dans une variable tableau ou une liste de variable: mais si tu n,en racontes pas davantage, ça va être particulièrement compliqué de t'expliquer comment réaliser ta récupération. Quoi qu'il en soit, les valeurs sont là, donc c'est faisable dès le chargement de la page.

Posté : 10 juin 2005, 10:01
par hul
Autant pour moi.

Je remplis la liste A avec une boucle sur une base Mysql, et je remplis la liste B grâce à un bouton prenant des éléments de la liste A pour les mettre dans la liste B.

Posté : 10 juin 2005, 10:05
par Cyrano
Dis, tu pourrais pas être un brin plus précis et clair: selon ce que tu m'expliques, tu fais simplement une copie de ta liste A pour créer la liste B.... je saisis pas l'intérêt et à priori il manque quelque chose quelque part.

Donne un exemple avec des détails ou mieux, mets nous ton code.

Posté : 10 juin 2005, 10:28
par hul
Je ne peux pas être plus précis. Si tu ne vois pas l'intérêt de ça, mon responsable (encore plus novice que moi... :roll: ) lui le voit.

Voici mon code.
<? php
// Script pour basculer les éléments de la liste 1 vers la liste 2
echo "<SCRIPT LANGUAGE=\"JavaScript\">
function Deplacer(l1,l2)
{if (l1.options.selectedIndex>=0) 
   { o=new Option(l1.options[l1.options.selectedIndex].text,l1.options[l1.options.selectedIndex].value);
	 l2.options[l2.options.length]=o;
	 l1.options[l1.options.selectedIndex]=null;}
else {alert(\"Aucune élément sélectionné\");}}
</SCRIPT>";

// Sélection des domaines fonctionnels

// Liste 1 éléments non sélectionnés
$requete = "Select codsdf, libdfo, libsdf from smi_sd2 where codsmi =".$codsmi;
$resultat = mysql_query( $requete, $base_id)
             or die( "Exécution requête impossible.");

$codhtml= "<TABLE><TR>
	<TD align=\"center\"><B><FONT size=\"2\">Domaines fonctionnels proposés</FONT></B><BR>
	<SELECT align=top name=\"lst_df1\" size=10  style=\"width:300px\">";
while ( $row = mysql_fetch_array( $resultat)) {
    $l_codsdf = $row["codsdf"];
    $l_libsdf = $row["libdfo"].": ".$row["libsdf"];
    $codhtml.= "<OPTION VALUE='$l_codsdf' >$l_libsdf</OPTION>";}
$codhtml.= "</SELECT></TD>";
print $codhtml;

echo "<TD align=\"center\">
	<INPUT type=\"button\" value=\"Ajouter >>>\" onClick=\"Deplacer(this.form.lst_df1,this.form.lst_df2)\">
	<BR><BR>
	<INPUT type=\"button\" value=\"<<< Enlever\" onClick=\"Deplacer(this.form.lst_df2,this.form.lst_df1)\">
	</TD>";
$codhtml= " 
	<TD align=\"center\"><B><FONT size=\"2\">Domaines fonctionnels retenus</FONT></B><BR>
	<SELECT align=top name=\"lst_df2\" size=10  style=\"width:300px\">";

// Liste 2 éléments sélectionnés
$requete = "Select smi_sdf.codsdf, libdfo, libsdf from smi_sdf,tab_sdf,tab_dfo ";
$requete.= " where codsmi=".$codsmi;
$requete.= " and smi_sdf.codsdf=tab_sdf.codsdf and tab_dfo.coddfo=tab_sdf.coddfo";
$resultat = mysql_query( $requete, $base_id)
             or die( "Exécution requête impossible.");
while ( $row = mysql_fetch_array( $resultat)) {
    $l_codsdf = $row["codsdf"];
    $l_libsdf = $row["libdfo"].": ".$row["libsdf"];
    $codhtml.= "<OPTION VALUE='$l_codsdf' >$l_libsdf</OPTION>";}
$codhtml.= "</SELECT></TD></TR></TABLE>";
print $codhtml;

mysql_close($base_id);

?>

<p class=MsoNormal><INPUT TYPE="SUBMIT" VALUE="OK" NAME="bou_detsmi"><span
style='mso-tab-count:1'>           </span><INPUT TYPE="SUBMIT" VALUE="Annuler" NAME="bou_detsmi"><span
style="mso-spacerun: yes"> </span></p>
en Cliquant sur Ok Je veux pouvoir récupérer les éléments de la 2ème liste et les enregistrer dans ma base.

Posté : 10 juin 2005, 10:36
par Cyrano
Ben voilà, ça commence à devenir plus facile:

Dans la premier boucle while de création de ta liste d'option, tu as toutes les valeurs que tu veux: il te suffit d'ajouter une ligne pour mettre en plus ce valeurs dans une variable de type tableau (array) et récupérer ensuite ce tableau pour faire ta mise à jour : est-ce que tu saisis le principe ou pas trop ?

Posté : 10 juin 2005, 10:43
par hul
Pas du tout, j'comprends pas.

Je débute vraiment :cry: .

Posté : 10 juin 2005, 10:47
par patbator
hello,

ton soucis est surtout javascript non ? :wink:

Bon, alors moi je mettrait les selects en multiple="multiple", puis tu fais un peu évoluer ta fonction déplacer pour déplacer tous les options.selected=true.

puis onSubmit de ton form, tu dois passer tous les élément de ton select de destination à selected :
for (var i=0; i<(elem.options.length); i++)
elem.options.selected = true;

et du coup ta page d'action recoit un $_POST ou $_GET[lst_df2] qui est un tableau qui contient toutes tes values...

a+

Posté : 10 juin 2005, 10:49
par hul
Ok je vais essayer ça.

Pourvu que ça marche [-o<

Merci.