Initialiser session d'un select multiple

bobi
Invité n'ayant pas de compte PHPfrance

18 déc. 2006, 13:46

Bonjour à tous,

j'ai un select multiple dont les options sont récupérés dynamiquement à partir d'une table.

Code : Tout sélectionner

<select name="departement[]" size="5" multiple> ... </select>
Lors de l'envoi du formulaire je voudrais initialiser tous les choix optés en session et ce dans le but de re-sélectionner ces éléments quand on revient au formulaire.

Ma question est donc double :
1. comment initilialiser les sessions de ce champ multiple.
$departement = $_POST['departement']; 
foreach ($departement as $valeur) 
{ 
//code
}
J'ai trouvé ceci mais je ne vois pas trop comment y mettre mes sessions.

2. comment ensuite faire re-sélectionner tous ces champs dans le formulaire.
<option value="xxx"<?php if( blabla ) echo " selected";?>>xxx</option>
Merci pour votre aide

ViPHP
ViPHP | 1961 Messages

18 déc. 2006, 13:50

Bonjour,

Tu appelles quoi "les sessions" ???
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

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

18 déc. 2006, 13:52

Bonjour,

Alors déjà, dans un premier temps et pour simplifier, que le select soit simple ou multiple, pour préselectionner une option, il suffit d'ajouter l'attribut "selected" dedans :)

Ton test consiste donc à savoir, pour chaque option, si celle-ci doit être sélectionnée ou non en fonction de sa valeur.

Tu dispose des données à préselectionner dans ta variable $departement (ou $_POST['departement']) qui est un tableau de valeur. Il te suffit donc de vérifier si la valeur de l'option est contenue dans ce tableau pour savoir si elle doit être sélectionnée ou pas, et le plus simple pour cela est d'utiliser la fonction in_array() :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

18 déc. 2006, 14:00

En fait j'initialise des sessions afin de garder en mémoire les différentes valeurs sélectionnées pour les passer sur une autre page de "pré-visualisation" et ainsi ré-afficher les données choisies par le membre.

Je vais voir la fonction in_array() ryle ;) Mais pour l'utiliser il me faut toujours l'initialisation de mes sessions non ?

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

18 déc. 2006, 14:09

Après la session_start() il te suffit de stocker ton tableau $departement dans $_SESSION["departement"] pour le réutiliser dans d'autres pages.

Combiné avec ce que te propose Ryle ça tiendra la route.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Invité
Invité n'ayant pas de compte PHPfrance

18 déc. 2006, 14:25

Après la session_start() il te suffit de stocker ton tableau $departement dans $_SESSION["departement"] pour le réutiliser dans d'autres pages.

Combiné avec ce que te propose Ryle ça tiendra la route.
Voui en fait c'est ce stockage que je ne sais pas faire :) Avec un champ unique c'est simple :
$_SESSION['departement'] = $_POST['departement']
Mais quand il s'agit d'un tableau je suis bloqué...

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

18 déc. 2006, 15:25

Bon alors tu ne devrais pas être bloqué bien longtemps puisque ca marche pareil avec un tableau ;)

Il te suffit donc juste de vérifier si ta valeur est contenue dans $_SESSION['departement'] (qui sera un tableau si $_POST['departement'] en est un) et d'ajouter le "selected" si besoin :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

18 déc. 2006, 18:30

Bon alors tu ne devrais pas être bloqué bien longtemps puisque ca marche pareil avec un tableau ;)

Il te suffit donc juste de vérifier si ta valeur est contenue dans $_SESSION['departement'] (qui sera un tableau si $_POST['departement'] en est un) et d'ajouter le "selected" si besoin :)
Arf j'ai l'impression d'être une bille en entendant ça :langue: parce que je ne comprend pas malgré moi lol
$_SESSION['departement'] = $_POST['departement']
pour une session simple. Tu dis que pour les tableaux c'est pareil, sachant que je récupères avec departement[], je ne vois pas du tout comment je peux faire... :roll:

merci !

ViPHP
ViPHP | 1961 Messages

18 déc. 2006, 20:30

Bonjour,

Fais un print_r($_SESSION['departement']); après ton affectation.

Ça t'aidera à comprendre.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

19 déc. 2006, 13:51

Quand tu dis "je sais pas faire" et que tu écrive bien les choses c'est surement parce que tu ne veux pas te jeter à l'eau.

Je te pousse un petit peu :wink:

Supposons que t'as 2 pages : une de saisie et l'autre pour afficher et qu'on veuille obstinément utiliser une session porteuse de données partagées entre les deux.
Le principe est donc de mémoriser les données dans la session à la source par la 1° page et les récupèrer de la session dans la 2° page.
Sachant que la session peut porter des données de diffrérent formats de conteneur : variables simples, tableaux ou objets de classes

Voici les 2 pages d'exemple:
Page1.php:
<?php
//recevoir les données transmises par le formulaire
//et les stocker dans la session
session_start();

if ($_POST["envoyer"]){
   //entre autre : le tableau departement
   $_SESSION["departement"] = $_POST['departement'];

   //passer la main à la 2° page
   header ("page2.php");
}
?>
<!-- Le formulaire -->
<form method="post">
Entre autre : la liste 'departement'
<p><select name="departement[]" multiple size="3">
<option value="1">valeur 1</option>
<option value="2">valeur 2</option>
<option value="3">valeur 3</option>
</select>
<p><input type="submit" name="envoyer" value="Envoyer">
</form>
Dans le page2.php: on affiche les données stockées dans la session par la page1.php
<?php
//rappel de la session
session_start();

//Affichage
if ($_SESSION["departement"])
foreach ($_SESSION["departement"] as $valeur=>$texte) {  
   //code 
   echo "<p>$valeur correspond à $texte</p>";
} 
?>
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Invité
Invité n'ayant pas de compte PHPfrance

19 déc. 2006, 21:28

Merci beaucoup tout le monde ! J'ai réussi à re-sélectionner tous les champs grâce à vous ;)

Maintenant je suis confronté à un autre souci. Je pensais que ça allait marcher mais non lol

Il s'agit de l'insertion dans la base.

J'ai fait :
foreach ($_SESSION['departement'] as $valeur)
{ 
     $departement = $valeur."*";
}
Et dans l'insertion :
$add = "INSERT INTO recrut_joueur(departement) VALUES ('".$departement."')";
En choisissant par exemple paris et seine-et-marne, je pensais retrouver paris*seine-et-marne* mais non je n'ai que paris*.

Quel est mon erreur ?

Merci !

ViPHP
ViPHP | 1961 Messages

19 déc. 2006, 21:32

Bonsoir,

Ton erreur est dans la concaténation.

Ceci devrait donner ce que tu attends
$departement = '';
foreach ($_SESSION['departement'] as $valeur){ 
     $departement .= $valeur . "*";
}
Note le . (point) devant le =
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Invité
Invité n'ayant pas de compte PHPfrance

19 déc. 2006, 21:36

Nikel chrome ça marche à merveille :o

Merci à tous et bonnes fêtes ! oh oh oh :D