[PHP] un select dynamique avec nom des mois - RESOLU: array + fonction for() = miracle

Voilà je veux générer un <select><option>… avec les noms des mois dedans.

J’ai fait qqch du genre :

function XX()
{
   echo '<select name="month">';
   echo '<option value="1"';
   echo ($_GET[month] == "1" ? ' selected>' : '>');
   echo 'Janvier</option>';
x 12 :paf: 
}

Mais voilà c’est pas automatique, ca m’oblige à faire un copier / coller / modifier à 11 reprises du trucs, c’est très naze donc ^^

Je voudrais le même mais dynamique.

ici il rajoute seul SELETED si la variable month est définie. J’aimerais, quand cette variable n’est pas définie, mettre mon selected sur le mois actuel.

Donc j’imagine que je dois faire (schématiquement)

if (isset ($_GET[month]))
{
$month = $_GET[month];
}
else {
$month = mois actuel; // et ca je fais comment ?? :D
}
ma fonction (où je remplace get par $month normal)

ok pour la seconde partie, j’ai fait

else
{
$month = date(n);
}

Et donc ca marche…

Mais j’ai toujours pas trouvé comment générer dynamiquement mes 12 mois… surtout que date() elle speak que english elle ^^

date(‘m’) ?

ou http://fr.php.net/manual/fr/function.getdate.php.

?? tu m’as donné getdate là.

Moi je veux pas les zéros initiaux ici, vu que mysql se débrouille bien sans eux ^^ ca ne pose pas, visiblement, de soucis pour faire ma requête ensuite.

Par contre pour mes noms de mois… là je suis bloqué… faut faire un array et un for i +1 12 ?

ouai, moi je ferais ça

Edit : cadeau, que t’ai pas à retapper ^^

$mois = Array(’’,‘Janvier’,‘Février’,‘Mars’,‘Avril’,‘Mai’,‘Juin’,‘Juillet’,‘Aout’,‘Septembre’,‘Octobre’,‘Novembre’,‘Décembre’);

$MonthName = array('1'=>'Janvier','2'=>'Février',...);
echo '<select name="month">';
for($i=1,$i<13,$i++)
{
echo '<option value="'.$i'"';
echo ($month == "$i" ? ' selected>' : '>');
echo ''.$MonthName[$i].'</option>';
}
echo '</select>';

Faut que je fasse ca avec des return :slight_smile:

PS: merci du coup de patte ^^

Bon dernière question : entre mes transporteurs, mes clients, les mois et les années j’ai 4 fonctions de construction de mes SELECT…

Est ce que sur le même principe c’est intéressant de tout regrouper dans une même fonction :

function getDossierSearchForm()
{
$DossierSearchForm = '<form>...';
$DossierSearchForm .= getTransporteursToOptions();
$DossierSearchForm .= getClientsToOptions();
...
$DossierSearchForm .= '</form>';

return $DossierSearchForm;
}

Et ensuite donc appeller cette fonction pour afficher mon formulaire en lieu et place des 4 séparées ? L’inclusion du code purement html est-elle aussi opportune ?

Là on touche aux performances, et je sais pas trop les effets de ce genre de manips…

Ton for, il est moche :

{
echo '<option value="'.$i'"';
echo ($month == "$i" ? ' selected>' : '>');
echo ''.$MonthName[$i].'</option>';
}

=>

echo '<option value="', $i, '"',
        $month == "$i" ? ' selected="selected"' : '',
        '>', $MonthName[$i], '</option>';

C’est mieux (pas de concanétation superflue, etc)

okay, merci bien.

Et concernant ma supra fonction qui regroupe toutes les autres, c’est une bonne ou mauvaise idée ?

C’est comme ça que fonctionnent certains. Maintenant je sais pas qu’est ce qui est le mieux.

Pour le reste, for c’est une instruction. Pas une fonction.