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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Récupérer tous les éléments d'une liste

par Cyrano » 10 juin 2005, 10:53

Ok, en modifiaint le premier while comme ceci:
$liste = array("codsdf"=> array(), "libdfo" => array(), "libsdf" => array());
while ( $row = mysql_fetch_array( $resultat))
{
    $l_codsdf = $row["codsdf"];
    $l_libsdf = $row["libdfo"].": ".$row["libsdf"];
    $codhtml.= "<OPTION VALUE='$l_codsdf' >$l_libsdf</OPTION>";
    array_push($liste['codsdf'],$row['codsdf']);
    array_push($liste['libdfo'],$row['libdfo']);
    array_push($liste['libsdf'],$row['libsdf']);
}
On commence par créer un tableau $liste qui aura trois index correspondant aux trois champs issus de ta requête, : codsdf, libdfo et libsdf

Tu récupères dans une boucle ensuite de la manière suivante (ici un exemple en affichant, mais tu peux faire autre chose)
$nb = count($liste['codsdf'])
for($i = 0; $i < $nb; $i++)
{
    echo("<p>Champ codsdf : ". $liste['codsdf'][$i] ."<br />\nChamp libdfo : ". $liste['libdfo'][$i] ."<br />\nChamp libsdf : ". $liste['libsdf'][$i] ."</p>\n");
}
Essaye ça, ça devrait être plus facile ensuite.

par hul » 10 juin 2005, 10:49

Ok je vais essayer ça.

Pourvu que ça marche [-o<

Merci.

par patbator » 10 juin 2005, 10:47

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+

par hul » 10 juin 2005, 10:43

Pas du tout, j'comprends pas.

Je débute vraiment :cry: .

par Cyrano » 10 juin 2005, 10:36

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 ?

par hul » 10 juin 2005, 10:28

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.

par Cyrano » 10 juin 2005, 10:05

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.

par hul » 10 juin 2005, 10:01

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.

par Cyrano » 10 juin 2005, 09:58

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.

par hul » 10 juin 2005, 09:56

La liste est chargée dynamiquement.

par Cyrano » 10 juin 2005, 09:34

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.

par hul » 10 juin 2005, 09:30

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.

par Cyrano » 09 juin 2005, 21:21

l'intérêt m'échappe un peu, mais bon: comment est générée cette liste ? dynamiquement ou non ?

par hul » 09 juin 2005, 21:19

En fait, il s'agit d'enregistrer tous les éléments qu'ils soient sélectionnés ou non...

Merci pour vos réponses.

par Cyrano » 09 juin 2005, 17:08

Comment ça "tous" les éléments ? Ceux qui ont été sélectionnés ou tous ceux présents dans la liste ?