Formulaire avec plusieurs Select et affichage des selected au retour sur la page

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 : Formulaire avec plusieurs Select et affichage des selected au retour sur la page

par Xvider » 27 févr. 2008, 14:36

a la ça me semble beaucoup beaucoup mieux.

Je vais tester cela de ce pas.

Un collègue venait justement de me mettre sur cette piste là effectivement.

Je test et te dit ça.

Merci par avance

EDIT :

Donc Merci Beaucoup c'était effectivement le bonne piste, tout fonctionne a merveille.

Une petit peu de réadaptation de ton exemple mais c'est parfait.

Il fallait tout simplement y penser et bien sur j'ai bloqué sur une autre façon de faire, donc forcement j'en trouvais pas le bout :p

Merci Enorme

par d0m » 27 févr. 2008, 14:34

En utilisant une fonction qui crée les listes il faudra de toute façon passer les différents options en paramètres.

Maintenant si organiser tes données pour les passser en paramètres te dérange, tu peux faire cela dans une boucle :
<?php
//tu parcours toutes les valeurs mémorisés ce qui revient à parcourir chaque liste
foreach($_SESSION['valeurs_selectionnes_page_detail_livre'] as $nom_liste => $valeur_selectionnee){?>
  //création du select avec le nom correspondant à la variable de session
 <SELECT NAME="<?php echo $nom_liste;?>">
  //là tu insère tes options selon la méthode de stockage choisi
  for/foreach/while...{
    <OPTION VALUE="<?php echo $valeur;?>" <?php if($valeur==$valeur_selectionnee) echo 'selected="SELECTED"';?>>.$valeur."</OPTION>
  }
  </SELECT>
}

par Xvider » 27 févr. 2008, 12:42

Je bloc a ce niveau
- tu peux utiliser pour cela une fonction générique(évite de taper des dizaines de lignes de codes)
- tu passes dans cette fonction la valeur de la variable de session correspondante à la liste.
- tu as une page avec des listes et des choix pré sélectionnées (les valeurs dans la variable de session)

Parce que le faire tout en connaissant chaque champ je peu mais rédiger la fonction qui ce fou du nom c'est une autre affaire.

Et justement j'aimerai que ça puisse marcher dans toute les situation

En gros, j'avais envisager une fonction du genre :

- j'ai un select avec un ID donné et une variable de session lui étant associé portant le même nom.
- une fonction qui boucle sur le select d'un style

Code : Tout sélectionner

function select(idvariable) { for ($machin=0 , machin<idvariable.length (a la taille de mon select),machin++) { et la en fonction de ma variable de session je vérifie qu'elle champ avait été choisi et rajouter la mention selected dans le <option> } }
enfin c'est ce que j'avais en tête mais pas moyen de le réaliser je bloc dessus depuis deux jours

je te renouvelle l'endroit ou tu peu en avoir un exemple :p

http://xvider.atwebpages.com/

Mon problème commence a la page Detail du Livre.

par d0m » 27 févr. 2008, 12:28

Pour ce faire lors du départ de la page je recup tous ces choix dans des variables de sessions
Ça c'est très bien, ça te permet de naviguer en gardant les choix en mémoire.
Quand il revien j'aimerai pouvoir faire ré afficher c'est choix sans avoir à connaitre la structure de la page en dur, c'est a dire la valeur des champs à contrôler (en admettant qu'ils viennent d'un BDD)
On récapitule :
- les choix déjà faits sont mémorisés dans la variable de session
- on revient sur ta page avec les listes
- tes listes sont donc à afficher
- il faut donc les construire
- tu peux utiliser pour cela une fonction générique(évite de taper des dizaines de lignes de codes)
- tu passes dans cette fonction la valeur de la variable de session correspondante à la liste.
- tu as une page avec des listes et des choix pré sélectionnées (les valeurs dans la variable de session)

Quelle étape as tu du mal à saisir/coder ?

par Xvider » 27 févr. 2008, 11:29

je rappelle mon objectif.

Page de formulaire multiSelect
L'utilisateur arrive, fait des choix, change de fenêtre et ce rend compte qu'il a oublié un truc dans la page précédente ou encore avant.

Quand il revient sur la page je veu que les choix de l'utilisateur effectué précédemment ce ré affiche comme s'il n'avait jamais changé de page.

Pour ce faire lors du départ de la page je recup tous ces choix dans des variables de sessions(j'ai pas trouvé comment faire autrement)

Quand il revien j'aimerai pouvoir faire ré afficher c'est choix sans avoir à connaitre la structure de la page en dur, c'est a dire la valeur des champs à contrôler (en admettant qu'ils viennent d'un BDD)

par d0m » 27 févr. 2008, 11:16

Tu n'est pas obligé d'utiliser un tableau, tu peux utiliser un objet ou même rien en utilisant directement les résultats des requêtes.
Ça ce n'est que de la manipulation de variables.

par Xvider » 27 févr. 2008, 10:49

Pas d'autre alternative que le tableau ?

Ca me parait un peu lourd pour un si petit truc, après je dit surement une connerie.

J'ai deja l'info dans une variable de session en plus, le but est uniquement de l'exploiter de façon générique quand on revient sur la page.

par d0m » 26 févr. 2008, 14:25

Alors disons que ça vient d'une base.
Il faudra dans ta base :
- le nom de la liste
- les différentes valeurs
- les différentes libelles (si différents des valeurs)

tu pourras par exemple faire un tableau multidimensionnel contenant les différentes listes ainsi que les options :
//extraction d'une ligne de la requête
while($ligne = ...){
  $tableau[$ligne['nom_liste']][] = array('valeur'=>$ligne['valeur'],'libelle'=>$ligne['libelle']) ;
}
Il te suffira ensuite de parcourir ce tableau et pour les différentes listes, les afficher avec la fonction générique.

par Xvider » 26 févr. 2008, 14:18

Pour l'instant c'est en dur pour mes tests mais ça viendra d'une base de donnée.

par d0m » 26 févr. 2008, 14:16

oui ok tu as plusieurs listes déroulantes mais elles ne sont pas magiques, à un moment donné il faudra remplir les différentes listes par les options possibles.

D'où sort tu ces options?
- en dur dans le code
- dans une base de données
- dans un fichier?

par Xvider » 26 févr. 2008, 12:10

Me revoilà,

Je viens de trouver pour héberger mon projet en cour.

Vous comprendrez surement beaucoup mieux ou je veu en venir.

http://xvider.atwebpages.com/

Mon problème commence a la page Detail du Livre.

Merci encore pour toutes ces réponses super rapide.

Le but de mon projet est:

Permettre à l'utilisateur de revenir à tout moment dans le devis, tant qu'il n'a pas validé la fin des opérations. (l'édition, qui lancera aussi son stockage dans la base de donnée)

Quasi tout ce fait en AJAX (une sorte de défis personnel en même temps)

par d0m » 26 févr. 2008, 11:49

oui il faudra construire un tableau par select et appeler la fonction pour chacun.
Mais ça aussi tu peux le faire de manière générique, tout dépend d'où tu sort les valeurs à mettre dans les select.

De toute façon il faudra à un moment ou un autre savoir quoi mettre dans la liste.

Le mieux déjà c'est de mettre toutes les valeurs sélectionnées des listes dans un tableau prévu pour cela dans la variable de session au lieu de mettre directement dans $_SESSION :
$_SESSION['valeurs_selectionnes']['type_feuilles'] = $_POST['type_feuilles'];
...
Tu peux très bien mettre l'affichage des listes dans une boucle et utiliser le nom figurant dans la variable de session :
foreach($_SESSION['valeurs_selectionnes'] as $nom_liste => $valeur_selectionnee){
  $options = array();
  //ici il faudra ta requête ou je ne sais quoi qui va chercher les éléments à placer dans la liste
  $options[] = array('value' => '..., 'libelle' => ...);
   ...
  creer_liste($nom_liste,$options,$valeur_selectionnee);
}

par Xvider » 26 févr. 2008, 11:16

Ce qui va donner un tableau par <select> ?

Et un apport a la fonction pour chacun des <select> aussi.

On sous entend toujours que l'on connait le contenu du <select> de cette façon :(

J'essaye de trouver ou héberger mon truc pour que le rendu soit compréhensible.

par d0m » 26 févr. 2008, 10:58

Oui,

le "générique" ne vient pas de la sélection par défaut mais de la construction de la liste.
Si tu veux quelque chose de générique, il te faut construire les listes de manière générique.
Par exemple avec une fonction :
function creer_liste($nom_liste,$options,$valeur_selectionnee){
  echo '<SELECT NAME="'.$nom_liste.'">';
  foreach($options as $option){
    echo '  <OPTION VALUE="'.$option['value'].'";if($option['value']==$valeur_selectionnee) echo 'selected="SELECTED"'; echo '>'.$option['libelle'].'"</OPTION>';
  }
  echo '</SELECTED>';
}
et l'utiliser comme ceci :
$options = array();
$options[] = array('value'=>'Recto/Verso','libelle'=>'Recto/Verso');
...
creer_liste('typesfeuilles',$options,$_SESSION['typesfeuilles']);

par Xvider » 26 févr. 2008, 10:54

Oui j'avais fait comme toi au début, je l'ai sorti parce que je sentais venir le moment de la vérification sur chaque champs, et ça me paraissait plus lisible de l'extérieur.

Une idée pour une méthode plus simple, genre une fonction générique qui marcherait pour tous les <select> ?

Et s'affranchir donc d'un if pour chaque <option>, de façon a ne pas avoir a ce soucier du nombre d'information a l'intérieur, surtout si le <select> et généré depuis une Base de Donnée.