HTML <SELECT> selected = '$variable [Résolu/Fermé]

Messages postés
230
Date d'inscription
jeudi 19 novembre 2009
Statut
Membre
Dernière intervention
19 mai 2015
- - Dernière réponse : Frouch3
Messages postés
1
Date d'inscription
lundi 21 juillet 2014
Statut
Membre
Dernière intervention
21 juillet 2014
- 21 juil. 2014 à 13:23
Bonjour,

Mon problème est relativement simple mais difficile à résoudre en recherchant sur internet.

Voici mon code :

<select name='tri'>
		<option value='Date desc'>Date décroissante</option>
		<option value='Date'>Date croissante</option>
		<option value='Prix desc'>Prix décroissant</option>
		<option value='Prix'>Prix croissant</option>
</select>


Un SELECT tout simple qui me sert à faire un tri dans les champs de ma requête PHP est qui fonctionne très bien. Je souhaite que, une fois le formulaire envoyé, mon SELECT prenne par defaut la valeur que je viens de sélectionner, logique. J'ai bien trouvé le SELECTED, mais du coup à chaque SUBMIT, mon SELECTED est suceptible de changer... Et je ne vois pas comment l'adapter

Comment faire?!

Merci!
Afficher la suite 

4 réponses

Meilleure réponse
2
Merci
Salut,
Je comprends pas bien l'utilité d'afficher le formulaire une fois qu'il est envoyé. Ceci dit vous pouvez faire comme ceci:

il faut que vous renvoyez la variable 'sélectionnée' dans la page, en get par url rewriting une fois les données du formulaire traitées:

header('location:page_formulaire.php?selection='.$selection);

Au début de la page vous vérifiez que la variable $_GET['selection'] existe:
if(isset($_GET['selection']){ 

$selection=$_GET['selection']; 
}else{ 
// sinon on lui donnes la valeur par défaut 
$selection=SELECTION; 
} 


Dans les balises option il suffit de rajouter un test voire une fonction:

function indiquer_selected($option,$valeur){ 
   if ($option==$valeur){ 
   echo " SELECTED='SELECTED'"; 
   } 
} 

<option value='Date desc' <?php indiquer_selected('Date desc',$selection) ?>>Date décroissante</option> 
  <option value='Date'<?php indiquer_selected('Date',$selection) ?>>Date croissante</option> 


PAreil pour les autres balises option.

Dire « Merci » 2

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 62637 internautes nous ont dit merci ce mois-ci

maka54
Messages postés
699
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
4 décembre 2016
78 -
Je comprends pas bien l'utilité d'afficher le formulaire une fois qu'il est envoyé.


Un formulaire de recherche, site d'annonce par exemple
...et? quand quelqu'un fait une recherche ce qui l'intéresse ce sont les résultats non?
zivodul8
Messages postés
230
Date d'inscription
jeudi 19 novembre 2009
Statut
Membre
Dernière intervention
19 mai 2015
19 -
Ce n'est pas une recherche!!

Il y a un filtre et un tri (croissant ou décroissant, prix ou date).

Quand l'utilisateur choisi par exemple le filtre "Immobilier", une fois qu'il clique sur OK et que la page est rechargée (formulaire envoyé), dans l'affichage du select il y a par défaut "Tous les types" alors qu'il y a bien un filtre d'appliqué sur "Immobilier"! Pas très pratique !
Messages postés
230
Date d'inscription
jeudi 19 novembre 2009
Statut
Membre
Dernière intervention
19 mai 2015
19
1
Merci
Je n'ai pas compris grand chose :/
Je realise un site de petites annonces, et lors de l'affichage je veux que l'utilisateur puisse choisir le type d'annonce qu'il souhaite voir et dans quel ordre (prix, date...). Je n'ai pas reussi a le faire dynamiquement (j'ai essaye avec du Javascript mais sans succes) alors j'ai opte pour un formulaire. Mais une fois le filtre fait ainsi que le tri, je veux qu'on puisse les voir dans le SELECT. C'est peut etre un peu plus clair maintenant.

Je comprend pas l'utilisation d'une fonction, comment savoir quelle est la valeur de l'option! L'utilisation du GET n'est pas indispensable, puisque je l'aurais recupere en POST.

N'y a t il pas une facon plus simple?
AssassinTourist
Messages postés
6126
Date d'inscription
lundi 16 janvier 2012
Statut
Contributeur
Dernière intervention
27 octobre 2019
751 -
Bonjour,
Et la solution de Locki ?
maka54
Messages postés
699
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
4 décembre 2016
78 -
<select name="tri">
		<option value="Date desc" <?php echo ($_POST["tri"] == "Date desc")?'selected="selected"':''; ?> >Date décroissante</option>
		<option value="Date" <?php echo ($_POST["tri"] == "Date")?'selected="selected"':''; ?> >Date croissante</option>
		<option value="Prix desc" <?php echo ($_POST["tri"] == "Prix desc")?'selected="selected"':''; ?> >Prix décroissant</option>
		<option value="Prix" <?php echo ($_POST["tri"] == "Prix")?'selected="selected"':''; ?> >Prix croissant</option>
</select>
j'ai essaye avec du Javascript mais sans succes
Bin non javascript fonctionnes sur le navigateur du client. Ce qui vous intéresse c'est d'obtenir les enregistrements de la base de donnée(c'est cela que veut dire 'dynamiquement') donc il faut que php fasse la 'passerelle' entre le navigateur et la base de données.

Je comprend pas l'utilisation d'une fonction, comment savoir quelle est la valeur de l'option! La fonction que j'ai écrite a des paramètres.

Quand on utilise un outil et qu'on ne sait pas quelque chose il faut se tourner vers la notice:

http://www.php.net/manual/fr/language.functions.php

Mais une fois le filtre fait ainsi que le tri, je veux qu'on puisse les voir dans le SELECT. C'est peut etre un peu plus clair maintenant.
Bin vous avez ma réponse, il y a d'autres . Vous pouvez aussi utiliser les variables de session à la place d'un GET mais je trouves ça un peu plus lourd.
Qu'est ce que vous ne comprenez pas dans:

header('location:page_formulaire.php?selection='.$selection);

ou dans
comment savoir quelle est la valeur de l'option
<option value='Date desc' <?php indiquer_selected('Date desc',$selection) ?>>Date décroissante</option>
<option value='Date'<?php indiquer_selected('Date',$selection) ?>>Date croissante</option>

Après le nom de la fonction entre parenthèses ce sont des paramètres. Donc différents pour chaque option(vous avez vu qu'il correspond à la value de l'option?).

L'utilisation du GET n'est pas indispensable, puisque je l'aurais recupere en POST.


Donc utilisez votre variable directement pas besoin du GET , pas besoin du header.

$selection=mysql_real_escape_string($_POST['tri']);

ou sans la variable $selection(qui sert à la sécurité et plus rapide à écrire que $_POST['tri']):
et sans la fonction:
<code><option value='Date desc'     
<?php     
if($_POST['tri']=='Date desc'){ echo "selected=selected" }    
?>    
Date décroissante</option>    

//et bien sûr à la suite:    

<option value='Date'     
<?php     
if($_POST['tri']=='Date'){ echo "selected=selected" }    
?>    
Date croissante</option>


etc...

Ou la totale avec une fonction(beaucoup plus simple, clair et rapide quand vous aurez compris)
//-------------déclaration de fonction:    
function ecrire_balise_option($tri,$texte,$defaut){    
    echo "<option value='".$tri."'"; 
    if($tri=$defaut){  // affichera la sélection par défaut si la value vaut le critère de tri utilisé
     echo " selected='selected' "; 
     } 
    echo "'>".$texte."</option>";    

}    

<--!--------------------- utilisation de la fonction -->    

<select name='tri'>    
<?php    
ecrire_balise_option('Date Desc', 'Date décroissante', $_POST['tri']);    
ecrire_balise_option('Date','Date croissante', $_POST['tri']);    
ecrire_balise_option('Prix desc','Prix décroissant', $_POST['tri']);    
ecrire_balise_option('Prix','Prix croissant', $_POST['tri']);    
/* enfin je ferait encore plus simple pour éviter d'écrire 4 fois la même ligne de la fonction avec des tableaux de variables(array) comme paramétres, mais je veut vous expliquer pas à pas et pas compliqué surtout si vus n'êtes pas familier avec les fonctions-indispensable en programmation*/    
?>  
</select>  
zivodul8
Messages postés
230
Date d'inscription
jeudi 19 novembre 2009
Statut
Membre
Dernière intervention
19 mai 2015
19 -
La solution de maka54 marche parfaitement!

Merci beaucoup!
Frouch3
Messages postés
1
Date d'inscription
lundi 21 juillet 2014
Statut
Membre
Dernière intervention
21 juillet 2014
-
Atrea, ton idée marche parfaitement, mais dans la déclaration de ta fonction il y a une petite erreur dans la condition :
if($tri==$defaut) * {
echo " selected='selected' ";
}
echo "'>".$texte."</option>";

Sinon ça reste la meilleure réponse que j'ai pu trouver.
En espérant que ça aide même si le post date.
Messages postés
230
Date d'inscription
jeudi 19 novembre 2009
Statut
Membre
Dernière intervention
19 mai 2015
19
1
Merci
ça ne fonctionne pas, la valeur qui s'affiche est systématiquement la dernière de mon SELECT :/
Messages postés
198
Date d'inscription
mardi 8 décembre 2009
Statut
Membre
Dernière intervention
2 juillet 2013
13
0
Merci
modifie ton selected par:
selected="<?php if (isset($_POST['tri'])){ echo $_POST['tri'];} ?>"