HTML <SELECT> selected = '$variable

Résolu/Fermé
zivodul8 Messages postés 229 Date d'inscription jeudi 19 novembre 2009 Statut Membre Dernière intervention 19 mai 2015 - 31 mars 2012 à 15:19
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!

4 réponses

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.
2
maka54 Messages postés 698 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 80
1 avril 2012 à 10:45
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
0
...et? quand quelqu'un fait une recherche ce qui l'intéresse ce sont les résultats non?
0
zivodul8 Messages postés 229 Date d'inscription jeudi 19 novembre 2009 Statut Membre Dernière intervention 19 mai 2015 22
2 avril 2012 à 10:32
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 !
0
zivodul8 Messages postés 229 Date d'inscription jeudi 19 novembre 2009 Statut Membre Dernière intervention 19 mai 2015 22
1 avril 2012 à 12:21
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?
1
AssassinTourist Messages postés 5710 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 1 311
2 avril 2012 à 10:32
Bonjour,
Et la solution de Locki ?
0
maka54 Messages postés 698 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 80
2 avril 2012 à 10:37
<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>
0
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>  
0
zivodul8 Messages postés 229 Date d'inscription jeudi 19 novembre 2009 Statut Membre Dernière intervention 19 mai 2015 22
2 avril 2012 à 20:10
La solution de maka54 marche parfaitement!

Merci beaucoup!
0
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
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.
0
zivodul8 Messages postés 229 Date d'inscription jeudi 19 novembre 2009 Statut Membre Dernière intervention 19 mai 2015 22
2 avril 2012 à 20:04
ça ne fonctionne pas, la valeur qui s'affiche est systématiquement la dernière de mon SELECT :/
1
Locki Messages postés 198 Date d'inscription mardi 8 décembre 2009 Statut Membre Dernière intervention 2 juillet 2013 13
31 mars 2012 à 22:20
modifie ton selected par:
selected="<?php if (isset($_POST['tri'])){ echo $_POST['tri'];} ?>"
0