Page 1 sur 1

liste déroulantes et récupération de valeurs

Posté : 23 août 2012, 13:10
par piotrowski-s
Bonjour à toutes et à tous, j'ai grâce à un script en javascript une liste qui en alimente une deuxième. La première est alimentée par une requête mysql.

Le soucis c'est lorsque je valide le formumlaire, la récupération des données de la seconde liste ne se fait pas, en effet le script ne récupère que la dernière valeur ajoutée.

Voici le code qui donne les listes:
<label>Comptes en gestion</label><table>
  <tr>
    <td>
      <select name="liste_champs" size="15" multiple class="multiple" OnDblClick="javascript:selection_champs(this.form.liste_champs,this.form.selection)" >
        <?php $sql="SELECT * FROM `client`" ; 
		  $result=mysql_query($sql) or die;
		  while($data=mysql_fetch_assoc($result))
		  {?>
        <option value="<?php echo $data['code_client'] ; ?>">(<?php echo $data['code_client'] ; ?>) <?php echo $data['raison_sociale'] ; ?></option>
        <?php }?>
        
        </select>
      </td>
    <td>
      <table>
        <tr><td><input class="bouton" type="button" name="selectionner" value=" >> " OnClick="javascript:selection_champs(this.form.liste_champs,this.form.selection)"></td></tr>
        <tr><td><input class="bouton" type="button" name="deselect" value=" << " OnClick="javascript:selection_champs(this.form.selection,this.form.liste_champs)"></td></tr>
        </table>
      </td>
    <td><select name="selection" size="15" multiple  class="multiple" OnDblClick="javascript:selection_champs(this.form.selection,this.form.liste_champs)"></select></td>
    <td>
      <table>
        <tr><td><input class="bouton" type="button" name="up" value=" + " OnClick="javascript:priorite_champ(this.form.selection,'up')"></td></tr>
        <tr><td><input class="bouton" type="button" name="down" value=" - " OnClick="javascript:priorite_champ(this.form.selection,'down')"></td></tr>
        </table>
      </td>
  </tr>
  </table>
</td>
    </tr>
</table>
et le javascript si ça peut aider, bien que je doute que le problème vienne de la. j'ai un peu plus de 1000 données qui viennent alimenter la première liste.

[javascript]<script type="text/javascript">
function selection_champs(champs,champs_affiche){
//on récupère l'endroit sélectionner dans le select source
selection = champs.selectedIndex;
if(selection != -1){
//on déselectionne tous les champs du select de destination où va être placer le(s) champ(s) selectionner
while(champs_affiche.selectedIndex != -1){
champs_affiche.options[champs_affiche.selectedIndex].selected = false;
}

while(champs.selectedIndex > -1){
if(champs.options[champs.selectedIndex].value == "Id_type_bien"){
champs.options[champs.selectedIndex] = null;
champs.form.Id_categorie_bien.options[0].select= true;
}else{
//on cherche la place de notre champ
for(place=0;place<champs_affiche.length;place++){
if(champs_affiche.options[place].text > champs.options[champs.selectedIndex].text){
break;
}
}
//on décale tous les champs
for(i=champs_affiche.length;i>place;i--){
champs_affiche.options = new Option(champs_affiche.options[(i-1)].text,champs_affiche.options[(i-1)].value);
}

//on insère le champ selectionner
champs_affiche.options[place] = new Option(champs.options[champs.selectedIndex].text,champs.options[champs.selectedIndex].value);
champs.options[champs.selectedIndex] = null;
champs_affiche.options[place].selected = true;
}
}

if(champs.length > 0){
if(selection >= champs.length ){
selection = champs.length-1;
}
champs.options[selection].selected = true;
}
}
}

function select_all(frm){
for(i=0;i<frm.liste_champs.length;i++){
frm.liste_champs.options.selected = true;
}
frm.liste_champs.name = "liste_champs[]";

for(i=0;i<frm.selection.length;i++){
frm.selection.options.selected = true;
}
frm.selection.name = "selection[]";
}

function priorite_champ(selection,mode){
if(selection.length < 2 ){return;}
old_place = selection.selectedIndex;
if(mode == 'up' && old_place > 0){
new_place = old_place-1;
}else if(mode == 'down' && old_place < selection.length-1){
new_place = old_place+1;
}

tmp = new Option(selection.options[new_place].text,selection.options[new_place].value);
selection.options[new_place] = new Option(selection.options[old_place].text,selection.options[old_place].value);
selection.options[old_place] = new Option(tmp.text,tmp.value);
selection.options[new_place].selected = true;
}
</script>[/javascript]

Par avance merci pour votre aide.

Re: liste déroulantes et récupération de valeurs

Posté : 23 août 2012, 14:14
par moogli
Salut,

Peux être plus précis ?

Qu'entend tu pas dernière sélection ?
Un p'tit screenshot ? ;)

Un var_dump($_POST); donne quoi ?

@+

Re: liste déroulantes et récupération de valeurs

Posté : 23 août 2012, 14:19
par piotrowski-s
le var_dumpt donne cela:

array
'titre' => string '' (length=0)
'civilite' => string 'Monsieur' (length=8)
'nom' => string '' (length=0)
'prenom' => string '' (length=0)
'tel' => string '0134933402' (length=10)
'fax' => string '0134933436' (length=10)
'gsm' => string '' (length=0)
'e_mail' => string '' (length=0)
'login' => string '' (length=0)
'pass_md5' => string 'y6w!7ghypo4' (length=11)
'selection' => string '1566' (length=4)
'enreg' => string 'Enregistrer !' (length=13)

en fait j'ai la première liste qui alimente la deuxième

et puis je souhaites récupérer tout de la deuxième mais il ne prend que la dernière valeur sélectionnée:


le screen du script donne ça

http://progeris.comyr.com/Sans2.png
même quand je mets polusieurs choix seul le dernier apparait dans le var dump...

Re: liste déroulantes et récupération de valeurs

Posté : 23 août 2012, 14:23
par moogli
Notation tableau pour le nom du champ sélect multiple ? (name="truc[]")


@+

Re: liste déroulantes et récupération de valeurs

Posté : 23 août 2012, 14:30
par piotrowski-s
justement quand je mets un nom de tableau avec des accolades le javascript ne marche plus Uncaught SyntaxError: Unexpected token ]

Re: liste déroulantes et récupération de valeurs

Posté : 23 août 2012, 14:35
par xTG
Normal vu qu'il trouve les éléments via leur attribut name.
Tu peux pour résoudre ce problème modifier ton script JS pour remplacer les form.selection par des getElementById("selection") et ajouter dans le select correspondant l''attribut id. ;)

Re: liste déroulantes et récupération de valeurs

Posté : 23 août 2012, 14:39
par piotrowski-s
merci pour votre aide.

Néanmoins je ne vois pas ou sont les getelementsbyName

Re: liste déroulantes et récupération de valeurs

Posté : 23 août 2012, 14:43
par piotrowski-s
ah pardon. la j'ai tout modifié, et dans le tableau il ne récupère que la dernière value toujours

array
0 => string '1599'

Re: liste déroulantes et récupération de valeurs

Posté : 23 août 2012, 14:48
par piotrowski-s
j'ai compris ce qui se passe. en fait il faut que je resélectionne les données qui sont dans le deuxième liste pour qu'elles soit validées, néanmoins si j'ai sélectionner de la première liste cela m'embete que l'utilisateur ait à recocher les données qu'il utilise. N'y a t'il pas un moyen de pouvoir faire en sorte que tout soit automatiquement sélectionner?


Par avance merci.

Re: liste déroulantes et récupération de valeurs

Posté : 23 août 2012, 14:54
par piotrowski-s
en fait je ne sais pas quoi modifier pour que chaque option ait l'attribut suivant: selected="selected"

Re: [RESOLU] liste déroulantes et récupération de valeurs

Posté : 23 août 2012, 16:31
par xTG
Tu peux faire une boucle sur les éléments de ton select et les sélectionner.
Tu as déjà un code exploitant l'attribut de sélection, tu n'as qu'à t'en inspirer. ;)