Page 1 sur 1

petit problème de formulaire

Posté : 24 avr. 2011, 19:08
par newbit
bonjour , pourriez vous m'expliquer comment je peux garder dans une liste déroulante les sélections après un submit
<form action="" method="post">
<select name="region[]" multiple="multiple">
<?php 
$reg=array('Alsace', 
'Aquitaine', 
      'Auvergne', 
      'Bourgogne', 
      'Bretagne', 
      'Centre', 
      'Champagne-Ardenne', 
      'Corse', 
      'Franche-Comté', 
      'Île-de-France', 
      'Languedoc-Roussillon', 
      'Limousin', 
      'Lorraine',
      'Midi-Pyrénées',
      'Nord-Pas-de-Calais',
      'Basse-Normandie',
      'Pays de la Loire',
      'Picardie',
      'Poitou-Charentes',
      'Provence-Alpes-Côte d\'Azur',
      'Rhône-Alpes',
      'Guadeloupe',
      'Guyane', 
      'Martinique',
      'Mayotte', 
      'La Réunion');


foreach($reg as $regi ){
if(isset($_POST['region']) and $_POST['region'] == $regi) {$p=' selected="selected"';}
echo'<option value="'.$regi.'" '.$p.'>'.$regi.'</option>';}

?>
</select>
<input type="submit"  value="envoyer">
</form>


Re: petit problème de formulaire

Posté : 24 avr. 2011, 19:12
par devlop78
essaie plutot quelque chose comme

in_array($_POST['region'],$regi)

Re: petit problème de formulaire

Posté : 24 avr. 2011, 19:41
par AB
Tu peux aussi utiliser les variables de session.

Re: petit problème de formulaire

Posté : 24 avr. 2011, 19:57
par newbit
merci, j'ai essayé mais cela ne marche pas
<php $reg=array('Alsace',
'Aquitaine',
      'Auvergne',
      'Bourgogne',
      'Bretagne',
      'Centre',
      'Champagne-Ardenne',
      'Corse',
      'Franche-Comté',
      'Île-de-France',
      'Languedoc-Roussillon',
      'Limousin',
      'Lorraine',
      'Midi-Pyrénées',
      'Nord-Pas-de-Calais',
      'Basse-Normandie',
      'Pays de la Loire',
      'Picardie',
      'Poitou-Charentes',
      'Provence-Alpes-Côte d\'Azur',
      'Rhône-Alpes',
      'Guadeloupe',
      'Guyane',
      'Martinique',
      'Mayotte',
      'La Réunion');


if(in_array(@$_POST['region'],$reg)){ echo'toto';}	
 ?>

<form action="" method="post">
<select name="region[]" multiple="multiple">
<?php
 
foreach($reg as $regi ){

echo'<option value="'.$regi.'" '.$p.'>'.$regi.'</option>';
}	  

Re: petit problème de formulaire

Posté : 24 avr. 2011, 21:50
par newbit
j'ai trouvé une solution, je sais pas si on peut faire mieux, si vous l'avez
<?php
function selec($tab,$post) {
     for ($i = 0, $w = count($post); $i < $w; $i++) {
         if ($post[$i] == $tab) {
             return TRUE;
         }
     }
     return FALSE;
 }

foreach($reg as $regi ){
 if (isset($_POST['region']) && selec($regi,$_POST['region'])) {
                  echo'<option  selected>'.$regi.'</option>';
              } else {
                  echo'<option >'.$regi.'</option>';
              }
}	  
?>

Re: petit problème de formulaire

Posté : 24 avr. 2011, 21:52
par Ryle
Cela fonctionnera mieux si tu le fait dans le foreach, et si tu utilises le bon nom de variable : $reg est un tableau, $regi une valeur. Ce qui t'intéresse c'est de savoir si la valeur que tu est en train d'afficher comme option est contenue dans le tableau de valeur sélectionnée par l'utilisateur :)

En fait, il te suffit de reprendre ton code initial et de changer uniquement le contenu du if pour y inclure le code que t'a donné devlop78


Edit : et oui, on peut faire plus simple que de re-développer la fonction in_array(), c'est de l'utiliser ;)

Re: petit problème de formulaire

Posté : 24 avr. 2011, 22:00
par newbit
j'arrive pas à trouver avec in_array
j'ai essayé ceci mais ça marche pas :oops:
foreach($reg as $regi ){
if(in_array($_POST['region'],$regi)) $p='selected';
echo'<option  '.$p.'>'.$regi.'</option>';
}	  

Re: petit problème de formulaire

Posté : 24 avr. 2011, 23:40
par devlop78
J'ai donné l'idée ... après à toi d'adapter, en plus je n'étais même pas sûr que l'ordre des arguments était bon.

Bref,

tu as :

- Array $reg
- Array $_POST['region']

Ce qui veut dire deux boucles imbriquées :
foreach($reg as $regi ){
if(in_array($regi,$_POST['region'])) $p='selected="selected"';
echo '<option '.$p.'>'.htmlentities($regi).'</option>';
}

Re: petit problème de formulaire

Posté : 25 avr. 2011, 19:26
par newbit
foreach($reg as $regi ){
if(in_array($regi,$_POST['region'])) $p='selected="selected"';
echo '<option '.$p.'>'.htmlentities($regi).'</option>';
} 
j'ai bien compris que j'avais 2 boucles imbriquées, mais cela ne marche pas même dans cette configuration :oops: .
pourriez vous m'expliquer? :P

Re: petit problème de formulaire

Posté : 26 avr. 2011, 00:17
par Ryle
Euh... ben en fait tu as deux tableaux, mais tu n'as qu'une seule boucle, qu'est pas particulièrement imbriquée (c'est déjà pas simple, alors c'est pas la peine de compliquer le problème avec des termes savants ;))

En fait, pour chaque élément du tableau $reg (c'est là qu'est ta boucle), tu va vérifier si celui-ci est contenu dans le tableau que tu reçois de l'utilisateur... ton code devrait donc fonctionner. A mon avis, il faut juste t'assurer que si l'élément n'est pas dedans, tu réinitialise bien la valeur de $p :
foreach($reg as $regi ){
  if(in_array($regi,$_POST['region'])) 
    $p='selected="selected"';
  else
    $p = '';
  echo '<option '.$p.'>'.htmlentities($regi).'</option>';
}

Re: petit problème de formulaire

Posté : 26 avr. 2011, 01:13
par devlop78
MDR. Je n'avais même pas vu. On aurait pu chercher longtemps. Ca aurait bien dans ce cas de nous dire que tous les éléments étaient sélectionnés à partir du 1er vraiment choisi ... :D

Re: petit problème de formulaire

Posté : 27 avr. 2011, 16:40
par newbit
Évidement si on n'oublie l'essentiel :lol:
merci messieurs :P