Page 1 sur 1

Reset de plusieurs listes déroulantes et de la variable session

Posté : 13 janv. 2016, 10:50
par jessyd
Bonjour à tous,

Je suis confronté à un petit problème sûrement banal, j'ai 3 listes déroulantes qui me servent de filtre, par exemple pour le premier filtre on sélectionne le niveau voulu (mon projet est un site web qui permet la consultation en ligne de ressources en langue étrangères, c'est une sorte de bibliothèque en ligne). Lorsque je choisi un niveau, il m'affiche bien les ressources correspondantes là aucun soucis.
Le soucis c'est que mes 3 listes déroulantes ne sont pas dans un formulaire, et j'aimerai lorsque l'on clique sur un bouton que tous les filtres soient remis par défaut et que la variable de session contenant la valeur choisie soit supprimée.
J'avais pensé tout d'abord à utiliser un onclick() sur le bouton mais le soucis c'est que le javascript ne permet pas de supprimer une variable session, il peut remettre à zéro les listes déroulantes par contre.
Donc j'aimerai savoir si vous aviez des idées pour résoudre ce problème car je ne sais vraiment pas comment m'y prendre.
Je vous montre la partie des filtres ci-dessous :
<?php
              // On liste les niveaux
              $niveau = Livre::getNiveau($bdd);
              $keyn= array_keys($niveau);
            ?>
              <select name="niveau" id="niveau" onchange="javascript:document.location.href='catalogue.php?genre=' + this.options[this.selectedIndex].value;">
                <option value="aucunfiltre">-- Tous les niveaux --</option>
                  <?php
                    for($k=0;$k<count($niveau);$k++){
                      echo '<option value="'.$keyn[$k].'"'.($_SESSION['genre'] == $keyn[$k] ? ' selected' : '').'>';
                      echo $niveau[$k+1].'</option>';
                    }
                  ?>
              </select>
            
                  &nbsp;
                  
            <?php
              //On liste les catégories
              $categories = Livre::getCategories($bdd);
              $key = array_keys($categories);
            ?>
							<select name="genre" id="genre">
								<option value="aucunfiltre">-- Tous les supports --</option>
									<?php
										for($i=0;$i<count($categories);$i++){
                      echo '<option value="'.$key[$i].'">';
											echo $categories[$i+1].'</option>';
										}
										?>
							</select>
              
                  &nbsp;
                  
            <?php
              // On liste les langues
							$langage = Livre::getLangage($bdd);
							$keyl = array_keys($langage);
						?>
							<select name="langage" id="langage">
								<option value="aucunfiltre">-- Toutes les langues --</option>
									<?php
										for($j=0;$j<count($langage);$j++){
											echo '<option value="'.$keyl[$j].'">';
											echo $langage[$j+1].'</option>';
											}
										?>
							</select>
              
              &nbsp;
          
              <input type="button" value="Reset" />
Merci d'avance.

Re: Reset de plusieurs listes déroulantes et de la variable session

Posté : 13 janv. 2016, 12:09
par ynx
Salut,

Le soucis étant que tes listes ne sont pas dans un formulaire, pourquoi alors ne pas ajouter un formulaire englobant tes 3 listes ?

Si tu veux pouvoir modifier une variable de session PHP à partir d'un événement javascript, tu dois te tourner vers le concept ajax pour effectuer une requête http depuis javascript.

Bonne journée,

Re: Reset de plusieurs listes déroulantes et de la variable session

Posté : 13 janv. 2016, 12:28
par jessyd
Bonjour, merci de votre réponse. C'est vrai que j'aurai pu mettre les 3 listes dans un form mais vu que c'est une sorte de menu je voulais pas mettre en première solution mes listes dans un form (pour le coup, je pense que j'ai une réflexion un peu bête).
Pour ce qui est de l'ajax, mes connaissances sont très faibles et cela m'a l'air compliqué mais c'est vrai que c'est une solution.
J'ai parlé à mon tuteur (j'ai oublié de préciser que j'étais en stage), et il m'a expliqué que je n'étais pas obligé de supprimer mes variables sessions et que je pouvais juste les vider tout simplement pour remettre à zéro en fesant une redirection.
Donc au final, j'ai trouvé une solution en javascript toute bête, désolé si au final ça n'est pas du PHP la solution.
Je montre ce que j'ai fais ça servira peut être à quelqu'un, j'ai juste fait un onclick :
<?php
              // On liste les niveaux
              $niveau = Livre::getNiveau($bdd);
              $keyn= array_keys($niveau);
            ?>
              <select name="niveau" id="niveau" onchange="javascript:document.location.href='catalogue.php?genre=' + this.options[this.selectedIndex].value;">
                <option value="aucunfiltre">-- Tous les niveaux --</option>
                  <?php
                    for($k=0;$k<count($niveau);$k++){
                      echo '<option value="'.$keyn[$k].'"'.($_SESSION['genre'] == $keyn[$k] ? ' selected' : '').'>';
                      echo $niveau[$k+1].'</option>';
                    }
                  ?>
              </select>
            
                  &nbsp;
                  
            <?php
              //On liste les catégories
              $categories = Livre::getCategories($bdd);
              $key = array_keys($categories);
            ?>
							<select name="genre" id="genre" onchange="javascript:document.location.href='catalogue.php?cate=' + this.options[this.selectedIndex].value;">
								<option value="aucunfiltre">-- Tous les supports --</option>
									<?php
										for($i=0;$i<count($categories);$i++){
                      echo '<option value="'.$key[$i].'"'.($_SESSION['cate'] == $key[$i] ? ' selected' : '').'>';
                      echo $categories[$i+1].'</option>';
                     // echo '<option value="'.$key[$i].'">';
										//	echo $categories[$i+1].'</option>';
										}
										?>
							</select>
              
                  &nbsp;
                  
            <?php
              // On liste les langues
							$langage = Livre::getLangage($bdd);
							$keyl = array_keys($langage);
						?>
							<select name="langage" id="langage" onchange="javascript:document.location.href='catalogue.php?lang=' + this.options[this.selectedIndex].value;">
								<option value="aucunfiltre">-- Toutes les langues --</option>
									<?php
										for($j=0;$j<count($langage);$j++){
                      echo '<option value="'.$keyl[$j].'"'.($_SESSION['lang'] == $keyl[$j] ? ' selected' : '').'>';
                      echo $langage[$j+1].'</option>';
										//	echo '<option value="'.$keyl[$j].'">';
										//	echo $langage[$j+1].'</option>';
										}
										?>
							</select>
              
              &nbsp;
              &nbsp;
              
              <input type="button" onclick="javascript:document.location.href='catalogue.php?genre&cate&lang';" value="Supprimer le filtre" />