Sélection valeur d'une liste déroulante

Signaler
Messages postés
279
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
6 août 2007
-
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
-
Bonsoir tout le monde,



je vous explique mon probleme. J'aimerai que dans ma liste déroulante
soit sélectionné l'élément voulu. Je m'explique : J'ai par exemple 10
dates dans mon select qui sont récupérer dans une BDD, et j'aimerai
pouvoir sélectionné l'une d'entre elle, par exemple la 5eme au
chargement de la page. Cette sélection n'est pas fixe, elle varie en
fonction de paramètres, mais j'aimerai que ca se selectionne dans le
select, au lieu de l'appeller 2 fois comme je le fais actuellement.



J'espere que j'ai été assez clair, sinon demandez moi.



Merci d'avance

19 réponses

Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Salut,



bah pour sélectionner un élément :



<select name="machin">

<option value="1">Option 1</option>

<option selected="selected" value="2">Option sélectionnée 2</option>

</select>



a +

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
oui non c'est pas super clair lol mais en gros vois si tu ne peux pas faire un replace en fonction de tes paramètres.
en gros tu mets ta grosse balise select en variable et puis

if( tes parametres si tu veux ){
$select= str_replace(">".$tavaleurparametre, " selected>".$tavaleurparametre, $select);
}

bon moi j'utilise ça parfois, mais je sais pas si j'ai été assez clair lol
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
selected c'est déprécié en xhtml, il faut utiliser selected="selected"

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
279
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
6 août 2007

Evangun j'ai pas tres bien compris ce que tu veux me faire dire, sinon
Anthomicro la solution que tu me donne c'est que c'est moi qui choisi
lequel sera sélectionné, alors que moi ce sera une sélection qui
changera. Je vais vous donner l'exemple visuel pour que ce soit plus
simple :



Sur ce site, dans la
partie Résultats du concours; j'ai en haut un select avec toutes les
dates du concours, et j'aimerai que ce soit la derniere qui soit
sélectionné, la dans l'exemple je recupere d'abord la denriere, et
ensuite je les listes toutes donc forcemment y en a une en double. Moi
j'aimerai juste toutes les lister, et que ce soit la derniere qui soit
selectionnée, mais c'est pas forcé que ce soit la premiere de la liste.



Sinon je tiens a préciser que le site est en cours de réalisation!!!



J'espere avoir été un peu plus clair.



Merci
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
non franchement c'est pas super clair mais bon, je vais pas donner de leçons lool



mais si tu travailles à partir d'une bdd, pourquoi tu ne trierais pas
tes résultats par ordre chronologique et tu mettrais le selected sur le
premier ou ler dernier élément?



si mon idée ne va pas avec ton projet, réexplique ça : "sur ce site, dans la
partie Résultats du concours; j'ai en haut un select avec toutes les
dates du concours, et j'aimerai que ce soit la derniere qui soit
sélectionné, la dans l'exemple je recupere d'abord la denriere, et
ensuite je les listes toutes donc forcemment y en a une en double. Moi
j'aimerai juste toutes les lister, et que ce soit la derniere qui soit
selectionnée, mais c'est pas forcé que ce soit la premiere de la liste." parce que je sais pas mais j'ai rien compris. et mets ton code aussi, ce sera bien :)
Messages postés
279
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
6 août 2007

Voila comment je récupere mes dates :



<center>Concours du <select name="concours">

<?php



echo
"<option>$date_dernier_concours</option>";


$req =
mysql_db_query("$sql_bdd","SELECT DISTINCT date FROM
t_resultat_concours ORDER BY id_resultat_concours DESC");


while
($rec=mysql_fetch_array($req))



{



$date=$rec[0];



echo "<option>".$date."</option>";



} ?>



</select>



Je récupere donc toutes mes dates, cependant je ne peux pas me
débrouiller pour que ce soit la premiere ou la derniere qui soit
selectionne, car je m'explique (en essayant d'etre clair cette fois
ci): l'administrateur peut entrer la date du prochain concours, celle
ci va s'ajouter au date de concours existantes. Et comme je liste
toutes les dates de tous les concours, le concours qu'il a ajouté n'a
pas encore eu lieu, donc il n'y a pas de résultat possible, il
apparaitra donc en premier ou denrier dans mon select (selon mon chois
de requete), sauf que moi je veux le dernier concours qui a eu lieu, il
sera donc le 2eme ou l'avant dernier, et c'est celui la que j'aimerai
qu'il soit sélectionné. J'espere que j'ai été assez clair.



Merci en tout cas de te pencher sur mon probleme
Messages postés
445
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
22 mars 2007
1
Salut,
Je sais pas non plus si j'ai compris. J'essaie de reformuler et tu me dis si c'est bien ça :
« Afficher chronologiquement dans ta liste toutes les dates de ta table t_resultat_concours , et sélectionner par défaut la plus récente dont les t_resultat_concours.resultat ne sont pas vides. » (ce ne sont pas les bons noms de table
C'est ça ?

Si c'est bien ça, il faut que ta requête te permette de savoir si tel concours a déjà eu lieu.
Ainsi, ça donnerait qqch du genre (mais je ne connais pas la structure de ta table...)
<select>
<?php
$req = mysql_db_query("$sql_bdd","SELECT DISTINCT date, vainqueur FROM t_resultat_concours ORDER BY date");
while ($rec=mysql_fetch_array($req)) {
$select='';
if (!empty($rec[1]))
$select=' selected="selected"';
echo '<option'.$select.'>'.$rec[0].'</option>';
} ?>
</select>

Mais je pense pas que tu enregistres les résultats dans cette table, si ? dans ce cas, il faudra que tu fasse une requête sur 2 tables, avec une jointure. Si tu n'y arrive pas, donne la description de cette table et de celle où sont enregistrés les résultats.

Dans tous les cas, je pense qu'il faut que tu enlèves la ligne echo "<option>$date_dernier_concours</option>";

Au fait, dans ta requête tu fais un ORDER BY sur une colonne que tu ne sélectionne pas... ce n'est pas correct.

Arn;o)
Messages postés
279
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
6 août 2007

Ouai voila c'est ca qu'il me faut.

Pour ton code je comprend pas tout: il manque pas quelque chose pour ca $select='';

Et sinon ca veut dire quoi ca : $select=' selected="selected"';



Pour la structure de ma table la voila:



CREATE TABLE `t_resultat_concours` (

`id_resultat_concours` int(10) NOT NULL auto_increment,

`date` varchar(30) NOT NULL default '',

`classement` varchar(12) default '0',

`num_cavalier` varchar(10) default '0',

`cheval` varchar(60) default '0',

`cavalier` varchar(50) default '0',

`gains` varchar(7) default '0',

`pts` varchar(5) default '0',

`dep` varchar(5) default '0',

`total` varchar(5) default '0',

`temps` varchar(10) default '0',

PRIMARY KEY (`id_resultat_concours`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;



Mais en tout cas c'est exactement ce qu'il me faut.
Messages postés
445
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
22 mars 2007
1
$select est une variable (qu'on aurait pu appeler autrement), qu'on initaialise dans tous les cas à vide, dans ce cas
echo '<option'.$select.'>'; donnera <option>
et si il y a un vainqueur (donc que le concours a déjà eu lieu), cette variable prend la valeur suivant : ' selected="selected"', donc
echo '<option'.$select.'>' donnera <option selected="selected"> c'est-à-dire que cette ligne sera sélectionnée dans la liste.

Je pense que ma solution va soulever un pb car le DISTINCT dans la reqête te permettait de ne sélectionner qu'un enregistrement par date, mais comme maintenant on renvoie aussi le vainqueur, chaque enregistrement sera unique, donc la requête te renverra tous les enregistrement de la table (et non plus un seul par date).
...
Messages postés
279
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
6 août 2007

Ok je comprend mieux.



C'est bon ca marche maintenant. Tu m'as résolu 2 problemes en un, vu
que je voyais pas comment faire pour récupérer la dernieres date avec
un classement. Donc maintenant ca marche nikel, c'est génial.



Sauf que j'ai un 2eme souci. Si tu reprends mon site dans la meme
partie, quand je veux changer la date pour voir d'autre concours,
j'envoie en POST la date sélectionné, sauf que comment je peux faire
pour qu'elle soit sélectionnée dans mon select, en listant toujours
toutes les dates des concours.



Merci bcp
Messages postés
445
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
22 mars 2007
1
Tu récupères la date postée dans $_POST['concours'], si cette variable est vide, on fais comme précédemment, sinon on sélectionne la ligne postée :

<?php
$req = mysql_db_query($sql_bdd,"SELECT DISTINCT date, vainqueur, id_resultat_concours FROM t_resultat_concours ORDER BY date");
while ($rec=mysql_fetch_array($req)) {
$select='';
if ( ((!empty($_POST['concours'])) && ($_POST['concours']==$rec[2])) || ((empty($_POST['concours'])) &&(!empty($rec[1]))) )
$select=' selected="selected"';
echo '<option'.$select.' value="'.$rec[2].'">'.$rec[0].'</option>';
} ?>

Arn;o)
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
Raahhh j'ai pas pu me connecter ni cette nuit parce que le forum était en panne après 1h (chez moi en tt cas rien n'apparaissait), ni aujourd'hui avec ce serveur qui marche une fois sur 30... j'ai donc raté la discussion mais je vois que arn a parfaitement pris les choses en main ;^)


juste une ou deux remarques: pourquoi tu ne ferais pas une table par date de concours? ça t'éviterait une taille monstrueuse au bout de quelque temps (enfin, ça dépend de son utilisation) et je trouve ça plus pratique à gérer. A quoi il faudrait rajouter une table qui contienne toutes les dates des concours, qui servirait d'index. Mais ce n'est qu'une idée, parce que tu as bcp de champs et tu veux peut-être pouvoir faire des opérations entre sans avoir à passer d'une table à l'autre... Encore une fois ça dépend de ce que tu veux en faire.
Et puis sinon je vois que pour tes dates, tu utilises un champs varchar(30), je ne sais pas comment tu fais exactement mais en tt cas tu devrais opter pour le format anglais 2005/08/16 si ce n'est déjà fait, comme ça le tri alphabétique revient au même que le tri chronologique. C'est le format date de MySQL par défaut d'ailleurs.
voili voilou
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Autant opter pour le format INT qui bouffe que 4 octets et qui permet
bien plus de choses en termes de tri tout en étant peu gourmand :-)

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
279
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
6 août 2007

Merci de vos réponses. Pour l'idée de faire une table par date j'y
avais pensé mais ce n'était pas pratique car je récupere des
informations par cette table et il faut qu'il y ait tout, c'est plus
facile et direct. Sinon pour l'optimisation je sais pas si ca joue un
role aussi important, et le format anglais n'est pas simple pour
l'utilisateur qui va s'occuper de ce site donc c'est pour ca que j'ai
opté pour cette solution, il n'aura aucun probleme comme ca. Et puis il
y aura normalement que 8 ou 10 conours par an, a raison de 10 champs
par concours, donc je pense pas qu'elle va saturée trop vite. En
tout cas merci de vos propositions.



Sinon pour en revenir a mon deuxieme probleme, ta solution ne marche
pas Anthomicro, cela me double toutes mes dates, et ca ne sélectionne
que la denriere comme précédemment, et non celle que j'avais
sélectionné. Donc si vous avez des idées, elles sont les bienvenues



Merci
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
eh bien essaie ça :



if(isset($_POST (machin);)) { $tadateconcoursPOST = $_POST (machin); }



$select = "<select><option value="1">1</option>


<option
value="2">2</option>... ";



if (isset( $tadateconcoursPOST )){
$select = str_replace ( $tadateconcoursPOST.'>', $tadateconcoursPOST.' selected="selected">', $select);
}
Messages postés
279
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
6 août 2007

Euh non je suis désolé mais ca marche pas non plus

Une autre idée ?
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
si ça doit marcher mais ce qui se passe surement c'est que le premier
script met toujours le selected dans la derniere balise, donc c'est
elle qui s'affiche. il faut que ce script ne s'exécute pas si tu as
déjà envoyé le formulaire.
Messages postés
279
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
6 août 2007

Non je suis désolé mais j'y arrive pas, j'ai une erreur en plus.



Voila mon code:



$date_dernier_concours = $_POST['concours'];



$req =
mysql_db_query("$sql_bdd","SELECT DISTINCT date, classement,
id_resultat_concours FROM t_resultat_concours ORDER BY date");

while ($rec = mysql_fetch_array($req)) {




$select = "<select><option".$select."
value='".$rec[2]."'>".$rec[0]."</option></select>";



if (isset( $date_dernier_concours )){

$select = str_replace ( $date_dernier_concours.'>', $date_dernier_concours.' selected="selected">', $select);

}



Donc la j'ai une erreur de variable indéfini au niveau de la ligne sur la déclaration de la variable select.

Mais apres je sais meme pas ou je dois appellé ma variable select, pour qu'elle soit affichée.



Donc comment je dois faire, et est-ce que mon code est bon ou pas?



Merci
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
remplace $date_dernier_concours = $_POST['concours']; par

if(isset($_POST['concours'])){$date_dernier_concours = $_POST['concours'];}

et pour afficher ensuite bah... soit tu mets un
echo à l'intérieur de la boucle, soit tu enregistres les différentes
valeurs de $select (qui changent à chaque passage de boucle) dans un
tableau...

bon si tu as vraiment trop de mal écris-moi un message à evangun2001@yahoo.fr en mettant PB PHPCS dans le sujet