Réaffichage données select multiple

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éaffichage données select multiple

Re: Réaffichage données select multiple

par mairo » 14 févr. 2012, 10:51

bon grâce à tes précieux conseils je progresse... il me réaffiche les éléments, ce qui est déjà une bonne chose mais sur une seule ligne ce qui me semble normal vu que j'utilise le code qui se trouve que dans un seul <option> (comme dis, au départ mon select n'a pas d'option, elles sont ajoutées au fur et à mesure des choix de l'utilisateur avant le select multiple et ceci via une fonction javascript).
Mon select ressemble à ça :
<select tabindex="41" name="Col1" id="Col1" size="14" multiple style="width: 550px" >
<option> <?php echo $_SESSION['panier']; ?> </option>
</select>

et le traitement (submit) se fait :
// Traitement après post et affichage des valeurs du champ select
if(isset($_POST['Col1']) && !empty($_POST['Col1'])){
$Col1_Array = $_POST['Col1'];
foreach($Col1_Array as $selectValue){
echo $selectValue."<br>";
$_SESSION['panier'] = $_SESSION['panier']."<br>".$selectValue ;
}
}

Les valeurs renvoyées sont "imprimées" juste sur une page blanche lorsque se fait le submit, à savoir une valeur par ligne mais comment rapatrier ça dans le select également par ligne et non tout sur la même ligne. Aurais-tu une idée ? il faut qu'il rapatrie le tableau entier avec les éléments choisis par l'utilisateur.
J'ai également essayé de déclarer directement en tableau via "Col1[]" mais cela ne change rien.
J'ai essayé aussi l'explode mais il y a un truc que je ne comprends pas, que dois-je mettre dans "ta_valeur" étant donné que je n'ai pas d'option ???
<option value="ta_valeur" <?php if (in_array("ta_valeur", $tableau)){echo "selected";}?> > blabla </option>
Si je mets rien dans value donc "" et même chose après in_array, il sélectionne la ligne vide... évidemment...

Re: Réaffichage données select multiple

par Ryle » 12 févr. 2012, 22:38

Bah en fait quand tu repeuple ton select en javascript, tu génères des options. Du coup tu peux également modifier l'attribut selected de celles-ci :)

Pour le stockage, tu peux mettre un tableau en session, tu pourrais donc tout à fait faire un
$_SESSION['panier'] = $_POST['Col1'];
pour stocker directement la liste de valeur sélectionnée dans ta session.. et tu pourrais du coup faire un foreach($_SESSION['panier'] as $selectValue) pour le reparcourir simplement :)

Re: Réaffichage données select multiple

par mairo » 12 févr. 2012, 22:09

Ok je vois. Je vais essayer de chercher dans ce sens.
Par contre comme dis dans mon premier POST je n'ai pas de <option> dans mon sélect car il est alimenté ligne après ligne par une fonction Javascript "ajout" qui ajoute 4 champs sur la même ligne. Donc le but c'est vraiment de récupérer tout le tableau (select multiple) qui est stocké dans la session en cas de retour sur le formulaire.
J'ai pensé aussi changer et utiliser un textarea plutôt qu'un sélect multiple mais c'est pas génial pour l'utilisateur (suppression d'une ligne en cas d'erreur après l'ajout par exemple).
Par contre s'il y a une autre façon de stocker... Autre qu'une chaîne de valeur et qui permettrait de récupérer plus facilement les données je suis preneur... Pourvu que cela fonctionne :wink:
Encore merci pour tes précieuses infos.

Re: Réaffichage données select multiple

par Ryle » 12 févr. 2012, 20:37

En fait, le problème que tu vas rencontré c'est que la façon dont tu stockes les données en session n'est pas exploitable... tu constitues une chaine de valeurs séparées par des <br>.. c'est pas ce qu'il y a de plus simple pour l'exploiter ensuite, mais tu peux utiliser explode() pour reconstituer un tableau.

Ainsi en faisant un explode('<br>', $_SESSION['panier']) tu vas obtenir un tableau contenant les ids que tu as récupéré et tu pourras alors utiliser in_array pour vérifier si ton option se trouve dedans ou non :)

Un truc du genre
$tableau = explode('<br>', $_SESSION['panier']);
...
<option value="ta_valeur" <?php if (in_array("ta_valeur", $tableau)){echo "selected";}?> > blabla </option>

Re: Réaffichage données select multiple

par mairo » 12 févr. 2012, 16:31

Merci beaucoup pour la réponse.
Lors du submit, je traite le select multiple selon ce code :
if(isset($_POST['Col1']) && !empty($_POST['Col1'])){
$Col1_Array = $_POST['Col1'];
foreach($Col1_Array as $selectValue){
echo $selectValue."<br>";
$_SESSION['panier'] = $_SESSION['panier']."<br>".$selectValue ;
}
}

Dans le select multiple, j'ai déjà essayé de le rappeler en faisant $selectValue par exemple comme ceci :
value="<?php echo (isset($_SESSION['panier']) && $_SESSION['panier'] == '$selectValue')?'selected="selected"':'';?>"

mais mon select multiple est toujours aussi vide en cas de retour sur le formulaire.
Pourrais-tu me donner une idée de code utilisant in_array()
serait-ce quelque chose du genre ?
value="<?php if (in_array("$Col1_Array", "$selectValue")){echo "$selectValue";}?>"

Re: Réaffichage données select multiple

par Ryle » 11 févr. 2012, 21:23

Le principe d'un select multiple est similaire à un select simple, si ce n'est qu'il te faut ajouter l'attribut selected sur chacune des options qui doivent être présélectionnée.

Lorsque tu nommes un champ avec des crochets, au lieu d'un simple couple clé/valeur, tu récupères un couple clé/tableau de valeurs. il faut donc vérifier si la valeur de l'option est égale à l'une de ces valeurs :)

Grosso modo, au lieu d'une simple égalité ($valeurOption == $valeurSelectionnée) pour savoir si l'option est sélectionnée, , il faut vérifier la présence de la valeur dans le tableau de résultat avec in_array() par exemple. SI l'option est présente dans ce tableau, tu peux ajouter le selected :)

Réaffichage données select multiple

par mairo » 11 févr. 2012, 19:39

Hello
Je suis nouveau sur ce forum, j'ai lu énormément de post qui touchent un peu à ce problème mais je ne trouve pas LA solution...
J'ai un formulaire php (on l'appelera form1.php) avec un select multiple déclaré par name="nom[]". Ce select est alimenté par ajout de champs. J'arrive parfaitement à récupérer les valeurs et à les afficher pour les envoyer par mail par exemple etc... (submit.php)...Tout ça c'est ok.
Dans ce submit, je crée les "session" et les valeurs de ce select sont stockées dans un $_SESSION['panier'] par exemple.
Mon problème est lorsque l'on revient sur le formulaire, par exemple suite à une erreur de captcha, le select multiple est vide. Pour les autres champs (comme nom, prénom) j'ai utilisé value="<?php echo $_SESSION['champ11'];?>" et cela me réaffiche les valeurs stockées dans la session
Pour les select simple, ça marche parfaitement avec <?php echo (isset($_SESSION['liste2']) && $_SESSION['liste2'] == '1234')?'selected="selected"':'';?>
Textarea marche aussi mais...
Comment faire pour un select multiple qui contient des valeurs ajoutées au préalable et donc pas de <option>...?

GRAND merci pour votre aide... cela fait un moment que je cherche mais rien à faire...