Problème sur "switch"

[Résolu]
Signaler
Messages postés
58
Date d'inscription
vendredi 8 septembre 2006
Statut
Membre
Dernière intervention
9 novembre 2012
-
Messages postés
58
Date d'inscription
vendredi 8 septembre 2006
Statut
Membre
Dernière intervention
9 novembre 2012
-
Bonsoir tout le monde,

Voila j'ai un petit souci sur deux swicth de mon code php. Les switchs me servent à convertir la variable $mois (de 01 à 12) en $moislettre donc: JANVIER, FEVRIER etc..., le deuxième lui me sert pour passer mon mois à une requete mysql (1->12).

Mon problème est simple, tout fonctionne sauf quand $mois est égal à 09 (soit... septembre). J'ai tout regardé, j'arrive pas à comprendre pourquoi ce mois la ne fonctionne pas et tous les autres oui.

Voila à quoi ressemble le code:
<?php
if (isset($_POST['date'])){$date=trim($_POST['date']);}
// Motif servant à l'extraction de la date
// La date doit être au format MM/AAAA
$motif= '#^(\d{1,2})/(\d{4})$#';
if (preg_match($motif,$date,$resultat) ==0){
echo $date.' invalide';
}else{
$mois=$resultat[1]; // On extrait le résultat du preg_match 1 qui correspond au mois
$annee=$resultat[2]; // On extrait le résultat du preg_match 2 qui correspond à l'année
}
// On affecte le nom du mois en fonction de son numéro (Pour la page de garde)
switch($mois) {
case 01: $moislettre ="JANVIER";break;
case 02: $moislettre ="FEVRIER";break;
case 03: $moislettre ="MARS";break;
case 04: $moislettre ="AVRIL";break;
case 05: $moislettre ="MAI";break;
case 06: $moislettre ="JUIN";break;
case 07: $moislettre ="JUILLET";break;
case 08: $moislettre ="AOUT";break;
case 08: $moislettre ="SEPTEMBRE";break;
case 10: $moislettre ="OCTOBRE";break;
case 11: $moislettre ="NOVEMBRE";break;
case 12: $moislettre ="DECEMBRE";break;
}
// MONTH n'accepte que les chiffre de 1 à 12 et notre date est envoyé sous forme 01->12
switch($mois) {
case 01: $month =1; break;
case 02: $month =2; break;
case 03: $month =3; break;
case 04: $month =4; break;
case 05: $month =5; break;
case 06: $month =6; break;
case 07: $month =7; break;
case 08: $month =8; break;
case 09: $month =9; break;
case 10: $month =10; break;
case 11: $month =11; break;
case 12: $month =12; break;
}
?>


Si je fais un echo de $mois alors que j'ai rentré 09/2012 soit $mois = 09, j'ai bien un affichage de la valeur 09 mais si je demande l'affichage via echo de $month ou $moislettre j'ai droit à ceci:
Notice: Undefined variable: moislettre in C:\wamp\www\Monsite\pdf\doc\compte_rendu.php on line .......

Si quelqu"un peut m'aider je suis plus que preneur parce que je vois pas d'ou ça vient.

Merci d'avance.

maxredphenix

6 réponses


Je pense que tu te complique la vie pour pas grand chose ^^
Déjà, pourquoi 2 switch ? Un seul devrait suffir...
Ensuite le preg_match te retourne un tableau de string, d'ailleur 01 en chiffre vaut 1. Il te faut donc utiliser des string dans ton switch

switch($mois) {
case '01': 
$moislettre ="JANVIER";
$month =1; 
break;
case '02': 
$moislettre ="FEVRIER";
$month =2; 
break;
case '03': 
$moislettre ="MARS";
$month =3; 
break;
case '04': 
$moislettre ="AVRIL";
$month =4; 
break;
case '05':
$moislettre ="MAI";	
$month =5; 
break;
case '06':
$moislettre ="JUIN";
$month =6; 
break;
case '07': 
$moislettre ="JUILLET";
$month =7; 
break;
case '08': 
$moislettre ="AOUT";
$month =8; 
break;
case '09': 
$moislettre ="SEPTEMBRE";
$month =9; 
break;
case '10': 
$moislettre ="OCTOBRE";
$month =10; 
break;
case '11': 
$moislettre ="NOVEMBRE";
$month =11; 
break;
case '12': 
$moislettre ="DECEMBRE";
$month =12; 
break;
}
Messages postés
14813
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 juillet 2021
156
Bonjour,

case 08: $moislettre = "AOUT";break;
case 0 8 : $moislettre ="SEPTEMBRE";break;

Petite erreur de frappe ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Messages postés
58
Date d'inscription
vendredi 8 septembre 2006
Statut
Membre
Dernière intervention
9 novembre 2012

Bonsoir,

Merci pour la réponse.

Malheureusement, c'est moi en faisant des tests qui ai laissé une erreur, mais cela ne change pas... toujours la même erreur.

Si vous trouvez quelques quelque chose d'autre qui cloche je suis preneur.

Encore merci pour votre aide.

maxredphenix
Messages postés
14813
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 juillet 2021
156
Bonjour,

Il y a aussi l'option du tableau (voir comment déclarer un tableau, j'ai un gros doute sur mon code) :
$ListeMois[]=array(1=>"Janvier",2=>"Fevrier",...)

Ensuite, il faut tester :
if(IsEmpty($ListeMois[MonMois]))
{
Pas présent
}
else
{
Présent
}

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site

Oui petite erreur dans la déclaration du tableau ^^

c'est $listeMoi array(1> 'janvier', 2 => 'fevrier'...)

Sinon, je ne vois pas pourquoi ton test ?

Ce que me donne une solution encore plus simple pour le mois sans le 0 devant.
Il suffit de la caster en Int.

$date = '09/2012';
$listeMois = array(
1 => 'janvier'
, 2 => 'fevrier'
, 3 => 'mars'
, 4 => 'avril'
, 5 => 'mai'
, 6 => 'juin'
, 7 => 'juillet'
, 8 => 'aout'
, 9 => 'septembre'
, 10 => 'octobre'
, 11 => 'novembre'
, 12 => 'decembre'
);
if (isset($date)){$date=trim($date);}
// Motif servant à'extraction de la date
// La date doit êe au format MM/AAAA
$motif= '#^(\d{1,2})/(\d{4})$#';
if (preg_match($motif,$date,$resultat) ==0){
   echo $date.' invalide';
}else{

$mois = $resultat[1]; // On extrait le réltat du preg_match 1 qui correspond au mois
$annee=$resultat[2]; // On extrait le réltat du preg_match 2 qui correspond à'anné

$month = (int) $mois;
$moislettre = $listeMois[$month];
}
Messages postés
58
Date d'inscription
vendredi 8 septembre 2006
Statut
Membre
Dernière intervention
9 novembre 2012

Bonsoir,

Merci à tous les 2 pour vos réponses et j'ai qu'une chose à dire: c'est parfait.....

J'ai tenter ton code vanhayato et cela fonctionne parfaitement bien, je pense que le faite de déclarer le mois en string avec les guillemets à du résoudre ce souci. C'est vrai que j'ai été bête de pas le faire dès le début en 1 seul switch.

En tout cas merci à vous 2, j'ai enfin mon problème de résolu et en plus il est plus léger .

Bonne soirée