Bonjour,
Sur l'un de mes sites j'utilise un formulaire extra long sur lequel une liste déroulante (catégories) est lié à une panoplie de micro formulaires. Par exemple, à la sélection de la catégorie 1, ça va afficher 3 "input", catégorie 2 va afficher une liste, etc...
Pour ce faire, j'utilise actuellement un "onchange="javascript:submit(this)"" sur la liste pour recharger la page puis j'utilise un "if ($_POST["categorie"]==***)" pour afficher ou ré afficher la partie correspondante.
Aujourd'hui, je tente d'améliorer ce formulaire afin d'éviter le rechargement de la page à la sélection et j'essaye donc d'utiliser Ajax pour aboutir à ce résultat. La ou je "coince", c'est que je ne parviens pas à garder la sélection de la seconde partie du formulaire si l'utilisateur valide le formulaire et qu'une erreur survient.
Ma partie teste :
Sur ma sélection (ma liste) j'utilise onchange="montre(this.value);" qui transmet à ma fonction ajax le numéro de l'option qui elle même va chercher en "GET" (dans le fichier 'teste2.php') tout ce qui correspond au numéro transmit puis affiche le résultat dans un <span id="bloc"></span>.
Jusque la, pas de soucis.
Si je valide mon formulaire, la partie du formulaire associée à ma sélection disparaît ... la est mon soucis !
La seule solution que j'ai trouvé pour ne pas perdre ma sélection à la validation est d'inclure le fichier appelé via Ajax à la validation du formulaire directement dans mon bloc d'affichage :
et de vérifier dans ce même fichier (teste2.php) si celui-ci reçoit les informations en GET ou POST pour ré afficher ou pas les données...
Code : Sélectionner tout - Visualiser dans une fenêtre à part <span id="bloc"><?php if(isset($_POST['Valider'])) include('teste2.php');?></span>
Fichier teste2.php :
Ma méthode me semble tellement tordu que je préfère vous en faire part afin d'obtenir vos avis...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 <?php //récupération de la valeur de l'option via Ajax if(isset($_GET['numoption']) && !empty($_GET['numoption'])){ $numoption = $_GET['numoption']; } //si le formulaire a été validé, on inclue cette page dans le bloc lié à la liste déroulante pour récupérer et ré afficher les valeurs associées en cas d'erreur. if(isset($_POST['categorie']) && !empty($_POST['categorie'])){ $numoption = $_POST['categorie']; } //Catégorie 1 if($numoption == 1){?> Cat 1 <input type="text" name="cat1" value="<?php if(isset($_POST['cat1'])) echo $_POST['cat1'];?>" /> <?php } //Catégorie 2 if($numoption == 2){?> Cat 2 <input type="text" name="cat2" value="<?php if(isset($_POST['cat2'])) echo $_POST['cat2'];?>" /> <?php } //etc... ?>
Merci
Partager