Page 1 sur 1

Inverser l'ordre de l'année dans liste déroulante

Posté : 17 août 2006, 13:59
par bobi
Bonjour,

Ce code :
<select name="annees">
<?php for($i=1945;$i<=date("Y");$i++)
echo '<option value="'.$i.'">'.$i.'</option>';
?>
</select>
me permet d'afficher les années de 1945 à 2006.

Je voudrais afficher 2006 en premier et 1945 à la fin de la liste. Comment changer la boucle pour avoir cette affichage ?

Merci !

Posté : 17 août 2006, 14:20
par zeus
Actuellement, tu vas de 1945 à 2006 en augmentant de 1 à chaque boucle. Si tu essayais de partir de 2006 pour aller à 1945 en diminuant de 1 à chaque boucle ;)

Posté : 17 août 2006, 16:11
par thehawk
concretement le code donnerait quelque choz comme :
<select name="annees"> 
<?php for($i<=date("Y");$i=1945;$i--) 
echo '<option value="'.$i.'">'.$i.'</option>'; 
?> 
</select

Posté : 17 août 2006, 16:28
par Invité
Eh bien c'est ce que j'ai fait avant de poser ma question lol

Ca devrait marcher en toute logique mais non...j'ai l'impression que ça tourne en boucle et puis plantage...

Posté : 17 août 2006, 18:23
par iclo
Montre nous le code qui plante.

En résumé : on part de 2006, on boucle tant qu'on est au-dessus de 1945, et on décrémente d'une unité à chaque fois. Voilà, il n'y a plus qu'à traduire en php :wink:

Posté : 17 août 2006, 19:35
par bobi
Bé heu c'est à peu près le code de thehawk que j'avais fait avant de demander de l'aide.
<select name="annees">  
<?php for($i=date("Y");$i=1945;$i--)  
echo '<option value="'.$i.'">'.$i.'</option>';  
?>  
</select>
Je pars de 2006, jusqu'à 1945 en décrémentant.

Et ce code boucle à l'infini j'ai l'impression, ce que j'arrive à voir avant que mon IE ne plante c'est des 1945 à l'infini dans la liste déroulante.

Je ne comprend pas...

Posté : 17 août 2006, 20:36
par iclo
Le deuxième paramêtre d'un for est une condition, tant qu'elle est vrai on continue à boucler, là tu as une affectation, qui est toujours considérée comme '"vraie"
Tu dois boucler tant que i est plus grand ou égale à 1945.
Avec ça, tu devrais pouvoir corriger ton code

Posté : 18 août 2006, 13:36
par bobi
C'est nickel chrome :) Merci beaucoup !

Résolu !

Posté : 18 août 2006, 14:10
par zeus
Par contre, je trouve dommage que thehawk t'ai donné le code tout fait :?

Parce que côté apprentissage, c'est moyen

Posté : 18 août 2006, 14:35
par Invité
Non ne t'inquiètes pas zeus :) J'avais fait exactement ce code avant de venir demander de l'aide. C'est lui même qui bug...étant donné que c'était =1945

Posté : 19 août 2006, 12:42
par thehawk
je sens que je vé me taper dessus moi si ca continu ....

Posté : 20 août 2006, 09:24
par Cyrano
Ce code ne peut effectivement que planter : la structure d'une boucle for() doit répondre à des critères précis, il y a trois paramètres spécifiques :
  1. Le point de départ : on assigne une valeur à un pointeur;
  2. Le point d'arrivée : On compare la valeur du pointeur à la valeur cible;
  3. l'instruction à exécuter sur le pointeur à chaque tour de boucle si le point 2 est vrai (sinon, on sort de la boucle.)
Le second point est important : on compare, on assigne pas. Donc on doit utiliser un opérateur de comparaison et non un opérateur d'assignation.

Donc reprenons le for() :
  1. Le point de départ : le pointeur est égal à l'année en cours;
  2. Le point d'arrivée : tant que le pointeur est (ici) supérieur ou égal à la valeur cible;
  3. l'instruction à exécuter : on décrémente le pointeur.
Je te laisse corriger toi-même à partir de là :)