selection du mois en cours dans menu déroulant

Petit nouveau ! | 1 Messages

22 août 2008, 14:58

Bonjour à tous,
Après de longues recherches sur le net et tests chez moi sans réussites, je vous expose mon probleme en espérant une solution.

J'ai un formulaire d'insertion, avec la date du mois en menu déroulant. Ce que je voudrais, c'est que ce soit le mois en cours qui soit automatiquement selectionné par défaut dans ce menu.

Voici donc mon petti code:

<?php $date1 = date("m"); ?>
<form name="form1" method="post" action="">
  <label>
  <select name="mois" id="mois">
    <option value="06" <?php if (!(strcmp(06, $date1))) {echo "selected=\"selected\"";} ?>>juin</option>
    <option value="07" <?php if (!(strcmp(07, $date1))) {echo "selected=\"selected\"";} ?>>juillet</option>
    <option value="08" <?php if (!(strcmp(08, $date1))) {echo "selected=\"selected\"";} ?>>aout</option>
  </select>
  </label>
</form>
PROBLEME: ne fonctionne pas.

Je précise que si je modifie la valeur de mois pour selectionner le jour courant --- $date1 = date("m") ---, là ça fonctionne parfaitement! Il n'y a que sur la selection du mois et de l'année en cours que ça ne fonctionne pas.

Merci par avance de votra aider, à ceux qui savent.

Eléphant du PHP | 79 Messages

22 août 2008, 15:06

En lisant la documentation, la fonction strcmp retourne un entier et non un booléen. En modifiant tes 3 conditions en conséquence, cela devrait mieux fonctionner.

Mammouth du PHP | 1353 Messages

22 août 2008, 15:22

En lisant la documentation, la fonction strcmp retourne un entier et non un booléen. En modifiant tes 3 conditions en conséquence, cela devrait mieux fonctionner.
On peut effectuer l'opération avec un int sachant que strcmp renvoie 0 si les chaines sont égales, ainsi if(!strcmp("a","a")) fonctionne très bien.

En revanche, ton problème c'est de comparer un nombre avec une chaine de caractère, il faut que les arguments de strcmp soient des chaines de caractères...

06 n'est pas équivalent à "06"...
Tell me and I forget. Teach me and I remember. Involve me and I learn.

ViPHP
ViPHP | 2291 Messages

22 août 2008, 16:34

Salut,
Pourquoi ne pas faire comme ceci :?:
<?php

$date1 = date('n');


$date_mois = array(	1 	=> 'Janvier',
					2 	=> 'Février',
					3 	=> 'Mars',
					4 	=> 'Avril',
					5 	=> 'Mai',
					6 	=> 'Juin',
					7 	=> 'Juillet',
					8 	=> 'Août',
					9 	=> 'Septembre',
					10 	=> 'Octobre',
					11 	=> 'Novembre',
					12 	=> 'Décembre');
?>
<form name="form1" method="post" action="">
  <label>
  <select name="mois" id="mois">
    <option selected="selected"><?php echo $date_mois[date('n')]; ?></option>
    <option value="<?php $date_mois[date('n')-1];?>" ><?php echo $date_mois[date('n')-1] ?></option>
    <option value="<?php $date_mois[date('n')-2];?>" ><?php echo $date_mois[date('n')-2] ?></option>
    <option value="<?php $date_mois[date('n')-3];?>" ><?php echo $date_mois[date('n')-3] ?></option>
  </select>
  </label>
</form>

guilt92 pourrais m'enlever un doute stp ceci

Code : Tout sélectionner

value="06" est exact et va transmettre une valeur 06
Quand a
value =06 est une erreur de syntaxe

Mammouth du PHP | 1353 Messages

22 août 2008, 17:28

Salut,
guilt92 pourrais m'enlever un doute stp ceci

Code : Tout sélectionner

value="06" est exact et va transmettre une valeur 06
Quand a
value =06 est une erreur de syntaxe
En effet la premiere syntaxe est correcte et pas la seconde. Les arguments doivent etre des chaines de caractères.
Par contre le code ne va pas générer d'erreur, et dans certaines circonstances ca va même marcher, si il n y a pas un zéro devant :
echo strcmp(6,"6"); //affiche 0, ca marche
Mais c'est pas correct ;)
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Invité
Invité n'ayant pas de compte PHPfrance

22 août 2008, 20:49

Merci de vos réponses, mais je n'arrive pas à inclures aucunes d'elles dans mon projet.

En fait, dans le menu déroulant, la valeur est affiché en chiffre et non en texte:

01 pour janvier
02 pour février etc...

Par contre l'etiquette est affichée en texte, juste pour l'utilisateur.

Comme je le disait, mon script fonctionne avec le jour $date1 = date("d"), mais PAS le mois NI l'année, c'est à dire si j'utilise $date1 = date("m") pour le mois, et $date1 = date("y") pour l'année.


Si vous avez un editeur php (dreamweaver comme moi par ex), faites un copier-coller de mon code, et testez le. Vous verrez le problème que je rencontre (juste au cas où je n'arrive pas à m'expliquer lol).

Merci encore!

Invité
Invité n'ayant pas de compte PHPfrance

22 août 2008, 21:05

Bon, ça y est, c'est trouvé !!!!!!

Rien de grave, c'est juste une histoire de guillemets. Voici le code pour ceux que ça interesse:

En fait au lieu de mettre:

if (!(strcmp(06, $date1))) on met: if (!(strcmp("06", $date1))) (des guillemets pour 06).

Grand merci à "Sabotage" du forum www.developpez.net !

A bientot!

www.lancelotxp.com

Mammouth du PHP | 1353 Messages

25 août 2008, 14:41

Bon, ça y est, c'est trouvé !!!!!!

Rien de grave, c'est juste une histoire de guillemets. Voici le code pour ceux que ça interesse:
Euh...

Quand je t ai dit :

il faut que les arguments de strcmp soient des chaines de caractères...
06 n'est pas équivalent à "06"...


c'était un peu exactement ca...
Tell me and I forget. Teach me and I remember. Involve me and I learn.

ViPHP
ViPHP | 2291 Messages

25 août 2008, 16:15

Bon, ça y est, c'est trouvé !!!!!!

Rien de grave, c'est juste une histoire de guillemets. Voici le code pour ceux que ça interesse:
Euh...

Quand je t ai dit :

il faut que les arguments de strcmp soient des chaines de caractères...
06 n'est pas équivalent à "06"...


c'était un peu exactement ca...
Effectivement il aurait du prendre la peine de te lire tu lui avait donner la solution, comme dit CYRANO il ne faut pas s'attendre à des retours :wink: