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

bobi
Invité n'ayant pas de compte PHPfrance

17 août 2006, 13:59

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 !

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

17 août 2006, 14:20

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 ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 991 Messages

17 août 2006, 16:11

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
DevOps, Symfony4, Hoa

Invité
Invité n'ayant pas de compte PHPfrance

17 août 2006, 16:28

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...

ViPHP
ViPHP | 2144 Messages

17 août 2006, 18:23

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:

bobi
Invité n'ayant pas de compte PHPfrance

17 août 2006, 19:35

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...

ViPHP
ViPHP | 2144 Messages

17 août 2006, 20:36

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

bobi
Invité n'ayant pas de compte PHPfrance

18 août 2006, 13:36

C'est nickel chrome :) Merci beaucoup !

Résolu !

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

18 août 2006, 14:10

Par contre, je trouve dommage que thehawk t'ai donné le code tout fait :?

Parce que côté apprentissage, c'est moyen
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

18 août 2006, 14:35

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

Mammouth du PHP | 991 Messages

19 août 2006, 12:42

je sens que je vé me taper dessus moi si ca continu ....
DevOps, Symfony4, Hoa

Mammouth du PHP | 19672 Messages

20 août 2006, 09:24

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à :)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: