Page 1 sur 1

Initialiser session d'un select multiple

Posté : 18 déc. 2006, 13:46
par bobi
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

Posté : 18 déc. 2006, 13:50
par Ajoloca
Bonjour,

Tu appelles quoi "les sessions" ???

Posté : 18 déc. 2006, 13:52
par Ryle
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() :)

Posté : 18 déc. 2006, 14:00
par Invité
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 ?

Posté : 18 déc. 2006, 14:09
par sadeq
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.

Posté : 18 déc. 2006, 14:25
par Invité
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é...

Posté : 18 déc. 2006, 15:25
par Ryle
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 :)

Posté : 18 déc. 2006, 18:30
par Invité
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 !

Posté : 18 déc. 2006, 20:30
par Ajoloca
Bonjour,

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

Ça t'aidera à comprendre.

Posté : 19 déc. 2006, 13:51
par sadeq
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>";
} 
?>

Posté : 19 déc. 2006, 21:28
par Invité
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 !

Posté : 19 déc. 2006, 21:32
par Ajoloca
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 =

Posté : 19 déc. 2006, 21:36
par Invité
Nikel chrome ça marche à merveille :o

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