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

Mammouth du PHP | 702 Messages

23 août 2012, 13:10

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.

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

23 août 2012, 14:14

Salut,

Peux être plus précis ?

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

Un var_dump($_POST); donne quoi ?

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

Mammouth du PHP | 702 Messages

23 août 2012, 14:19

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...

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

23 août 2012, 14:23

Notation tableau pour le nom du champ sélect multiple ? (name="truc[]")


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

Mammouth du PHP | 702 Messages

23 août 2012, 14:30

justement quand je mets un nom de tableau avec des accolades le javascript ne marche plus Uncaught SyntaxError: Unexpected token ]

ViPHP
xTG
ViPHP | 7331 Messages

23 août 2012, 14:35

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. ;)

Mammouth du PHP | 702 Messages

23 août 2012, 14:39

merci pour votre aide.

Néanmoins je ne vois pas ou sont les getelementsbyName

Mammouth du PHP | 702 Messages

23 août 2012, 14:43

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'

Mammouth du PHP | 702 Messages

23 août 2012, 14:48

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.

Mammouth du PHP | 702 Messages

23 août 2012, 14:54

en fait je ne sais pas quoi modifier pour que chaque option ait l'attribut suivant: selected="selected"

ViPHP
xTG
ViPHP | 7331 Messages

23 août 2012, 16:31

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. ;)