Logique php
Fermé
nag
-
28 mai 2009 à 00:59
Yorundr Messages postés 289 Date d'inscription mardi 31 octobre 2006 Statut Membre Dernière intervention 11 juin 2012 - 28 mai 2009 à 12:43
Yorundr Messages postés 289 Date d'inscription mardi 31 octobre 2006 Statut Membre Dernière intervention 11 juin 2012 - 28 mai 2009 à 12:43
A voir également:
- Logique php
- Easy php - Télécharger - Divers Web & Internet
- Et logique excel - Guide
- Tableau analyse logique pdf - Guide
- Bouton php - Forum PHP
- \R php ✓ - Forum PHP
25 réponses
shadowmen121
Messages postés
124
Date d'inscription
dimanche 8 juillet 2007
Statut
Membre
Dernière intervention
1 décembre 2013
27
28 mai 2009 à 02:47
28 mai 2009 à 02:47
Salut,
en fait, ton code logique n'est pas correcte. En fait, sous PHP l'appelation " or " est défini comme " || " et " and " comme " && ". Dès lors, tu obtiens:
<?php
if(($annee == 1999 && $jour>=16 && $mois==2) || ($annee == 1999 && $mois>2) || ($annee==2000 && $jour<=4 && $mois==2) || ($annee==2000 && $mois==1))
{
$chinois = "Lièvre";
}
elseif
...
?>
Fait simplement attention, je crois que certaine de tes conditions sont pas " correcte "... Est-ce normal que ta deuxième condition ne comporte pas de jour ?
Sinon tu as l'idée général... Je ne l'ai malheureusement pas testé mais ceci devrait être exacte!
Bonne chance,
Cordialement
en fait, ton code logique n'est pas correcte. En fait, sous PHP l'appelation " or " est défini comme " || " et " and " comme " && ". Dès lors, tu obtiens:
<?php
if(($annee == 1999 && $jour>=16 && $mois==2) || ($annee == 1999 && $mois>2) || ($annee==2000 && $jour<=4 && $mois==2) || ($annee==2000 && $mois==1))
{
$chinois = "Lièvre";
}
elseif
...
?>
Fait simplement attention, je crois que certaine de tes conditions sont pas " correcte "... Est-ce normal que ta deuxième condition ne comporte pas de jour ?
Sinon tu as l'idée général... Je ne l'ai malheureusement pas testé mais ceci devrait être exacte!
Bonne chance,
Cordialement
bizu53
Messages postés
1274
Date d'inscription
samedi 30 août 2008
Statut
Membre
Dernière intervention
21 juin 2015
860
28 mai 2009 à 03:39
28 mai 2009 à 03:39
Tu as 3 variables, qui sont $jour $mois et $annee, mais la machine qui exécute ton code ne sait rien... elle ne sait pas que le 1 septembre 1999 est après le 2 août 1999 ni rien.
Pour tester si une date X est après une date Y :
si X et Y sont du même mois de la même année, X est après Y si le jour de X est supérieur à celui de Y
si X et Y ne sont pas du même mois mais de la même année, tu n'as qu'à tester si le mois de X est après celui de Y
si X et Y ne sont pas de la même année, tu n'as qu'à tester si l'année de X est après l'année de Y.
C'est cette logique là qui a été utilisée.
C'est très lourd, et c'est moche... moi j'utilise un moyen énormément plus simple pour comparer des dates, c'est juste une petite astuce à savoir :
Lorsqu'on écrit une date JJ/MM/AAAA dans le sens AAAAMMJJ, l'ordre chronologique correspond à l'ordre alphabétique ! :)
Pour ton code ça le simplifie en :
----------
Au passage, ce que t'as donné ton prof (si tu l'as bien recopié) est faux, correction :
Pour tester si une date X est après une date Y :
si X et Y sont du même mois de la même année, X est après Y si le jour de X est supérieur à celui de Y
si X et Y ne sont pas du même mois mais de la même année, tu n'as qu'à tester si le mois de X est après celui de Y
si X et Y ne sont pas de la même année, tu n'as qu'à tester si l'année de X est après l'année de Y.
C'est cette logique là qui a été utilisée.
C'est très lourd, et c'est moche... moi j'utilise un moyen énormément plus simple pour comparer des dates, c'est juste une petite astuce à savoir :
Lorsqu'on écrit une date JJ/MM/AAAA dans le sens AAAAMMJJ, l'ordre chronologique correspond à l'ordre alphabétique ! :)
Pour ton code ça le simplifie en :
$date=1000*$annee+100*$mois+$jour; //pour avoir le format AAAAMMJJ if($date >= 19990216 && $date <= 20000204) { $chinois = "Lièvre"; } else { if($date >= 20000205 && $date <= 20010123) { $chinois = "Dragon"; } }
----------
Au passage, ce que t'as donné ton prof (si tu l'as bien recopié) est faux, correction :
if(($annee == 1999 and $jour>=16 and $mois==2) or ($annee == 1999 and $mois>2) or ($annee==2000 and $jour<=4 and $mois==2) or ($annee==2000 and $mois==1)) ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
irem
Messages postés
164
Date d'inscription
mardi 22 mai 2007
Statut
Membre
Dernière intervention
9 octobre 2012
99
28 mai 2009 à 04:19
28 mai 2009 à 04:19
Bonjour,
Perso je partirai sur un timestamp de la fin du signe (nombre de secondes ecoulées depuis le 1er janvier 70) et un tableau des signes (dans l'ordre chronologique), par exemple
$table_signes=Array("dragon"=>t1,"lievre"=>t2,....);
ensuite a partir du $T recherché, dès que l'entrée dépasse la valeur et l'entrée précédente est inférieure, le signe était le bon
voili voulou
Perso je partirai sur un timestamp de la fin du signe (nombre de secondes ecoulées depuis le 1er janvier 70) et un tableau des signes (dans l'ordre chronologique), par exemple
$table_signes=Array("dragon"=>t1,"lievre"=>t2,....);
ensuite a partir du $T recherché, dès que l'entrée dépasse la valeur et l'entrée précédente est inférieure, le signe était le bon
$current_deb=mktime(date loin dans le temps); for each($table_signes as $key=>$value) { if ( ($value>$T) && ($current_deb<$T)) { echo $key; // on a le bon signe } else { $current_deb=$value; } }
voili voulou
Isa__
Messages postés
57
Date d'inscription
samedi 10 septembre 2005
Statut
Membre
Dernière intervention
14 octobre 2011
2
28 mai 2009 à 06:41
28 mai 2009 à 06:41
Bonjour,
Utilse plutot un switch...
Voici la syntaxe :
switch (Variable) {
case Valeur1 :
Liste d'instructions
break;
case Valeur2 :
Liste d'instructions
break;
case Valeurs... :
Liste d'instructions
break;
default:
Liste d'instructions
break;
}
C'est plus clair et ça t'évite des if dans tous les sens..
Bon courage
Isa
Utilse plutot un switch...
Voici la syntaxe :
switch (Variable) {
case Valeur1 :
Liste d'instructions
break;
case Valeur2 :
Liste d'instructions
break;
case Valeurs... :
Liste d'instructions
break;
default:
Liste d'instructions
break;
}
C'est plus clair et ça t'évite des if dans tous les sens..
Bon courage
Isa
Isa__
Messages postés
57
Date d'inscription
samedi 10 septembre 2005
Statut
Membre
Dernière intervention
14 octobre 2011
2
28 mai 2009 à 06:44
28 mai 2009 à 06:44
Bonjour,
Utilise plutot un switch dont voici la syntaxe :
switch (Variable) {
case Valeur1 :
Liste d'instructions
break;
case Valeur2 :
Liste d'instructions
break;
case Valeurs... :
Liste d'instructions
break;
}
Bon courage
Isa
Utilise plutot un switch dont voici la syntaxe :
switch (Variable) {
case Valeur1 :
Liste d'instructions
break;
case Valeur2 :
Liste d'instructions
break;
case Valeurs... :
Liste d'instructions
break;
}
Bon courage
Isa
if(($annee == 1999 and $jour>5 and $mois==2) or ($annee == 2000 and $mois>2) or ($annee==2001 and $jour<04 and $mois==2) or ($annee==2000 and $mois==1))
{
$chinois = "Lièvre";
}
else
{
if(($annee == 2000 and $jour>16 and $mois==2) or ($annee == 1999 and $mois>2) or ($annee==2000 and $jour<23 and $mois==1))
{
$chinois = "Dragon";
}
}
Voila je pense que c'est ça fait un essai ;)
C'etait quand même pas très dur avec le modèle, seulement de la logique.
{
$chinois = "Lièvre";
}
else
{
if(($annee == 2000 and $jour>16 and $mois==2) or ($annee == 1999 and $mois>2) or ($annee==2000 and $jour<23 and $mois==1))
{
$chinois = "Dragon";
}
}
Voila je pense que c'est ça fait un essai ;)
C'etait quand même pas très dur avec le modèle, seulement de la logique.
else
{
if(($annee ==2000 and $jour>5 and $mois==2) or ($annee == 2000 and $mois>2) or ($annee==2001 and $jour<23 and $mois==1))
{
$chinois = "Dragon";
}
}
{
if(($annee ==2000 and $jour>5 and $mois==2) or ($annee == 2000 and $mois>2) or ($annee==2001 and $jour<23 and $mois==1))
{
$chinois = "Dragon";
}
}
else
{
if(($annee == 2000 and $jour>5 and $mois==2) or ($annee == 2000 and $mois>2) or ($annee==2001 and $jour<23 and $mois==1))
{
$chinois = "Dragon";
}
}
{
if(($annee == 2000 and $jour>5 and $mois==2) or ($annee == 2000 and $mois>2) or ($annee==2001 and $jour<23 and $mois==1))
{
$chinois = "Dragon";
}
}
Mini sheep
Messages postés
181
Date d'inscription
vendredi 21 décembre 2007
Statut
Membre
Dernière intervention
20 octobre 2021
27
28 mai 2009 à 08:57
28 mai 2009 à 08:57
Peronnelement je connais pas les signe astrologique chinois mais pour le code, je peux t'expliquer.
Apres ton else, tu peux continuer avec un "if"
comme ca tu reecris le meme code en changant l'année, le mois et aussi le resultat et tu fait ca jusqu'a ce que tu fasse tous les signes.
if
else
if
else ...
Je sais faire le meilleur comme le pire, mais c'est dans le pire que je suis le meilleur.
Apres ton else, tu peux continuer avec un "if"
comme ca tu reecris le meme code en changant l'année, le mois et aussi le resultat et tu fait ca jusqu'a ce que tu fasse tous les signes.
if
else
if
else ...
Je sais faire le meilleur comme le pire, mais c'est dans le pire que je suis le meilleur.
Bonjour,
Voici la traduction du code de la première ligne.
if(($annee == 1999 and $jour>16 and $mois==2) or ($annee == 1999 and $mois>2) or ($annee==2000 and $jour<04 and $mois==2) or ($annee==2000 and $mois==1))
{
$chinois = "Lièvre";
}
SOIT
si ((l'année est égale à 1999 et le jour supérieur à 16 et le mois égal à 2) ou (si l'année est égale à 1999 et le mois supérieur à 2) ou (l'année égale à 2000 et le jour inférieur à 4 et le mois égal à 2) ou (l'année est égale à 2000 et le mois égal à 1))
{le signe chinois est "lièvre";}
Voici la traduction du code de la première ligne.
if(($annee == 1999 and $jour>16 and $mois==2) or ($annee == 1999 and $mois>2) or ($annee==2000 and $jour<04 and $mois==2) or ($annee==2000 and $mois==1))
{
$chinois = "Lièvre";
}
SOIT
si ((l'année est égale à 1999 et le jour supérieur à 16 et le mois égal à 2) ou (si l'année est égale à 1999 et le mois supérieur à 2) ou (l'année égale à 2000 et le jour inférieur à 4 et le mois égal à 2) ou (l'année est égale à 2000 et le mois égal à 1))
{le signe chinois est "lièvre";}
Yorundr
Messages postés
289
Date d'inscription
mardi 31 octobre 2006
Statut
Membre
Dernière intervention
11 juin 2012
44
28 mai 2009 à 09:03
28 mai 2009 à 09:03
Salut,
heu moi je suis pas très fan de ton bout de code, j'aurais fait un truc plus simple, mais plus logique a la fois. j'aurais transformé chaque date en TimeStamp que j'aurais comparé, un peu comme ca :
$timestampDebutPeriode = mktime(0,0,0, 2, 16, 1999); //16 fevrier 1999
$timestampFinPeriode = mktime(0,0,0, 2, 4, 2000); //4 fevrier 1999
voila l'encadrement pour le liévre, maintenant tu fait pareil pour ta date a toi et apres un simple if :
if ($timestampPeriodeDebut>=$timestampMaDate) && ($timestampMaDate>=$timestampPeriodeFin)
$chinois = "lievre";
et voila un if par signe chinois et c'est bon..
PS: Plutot que du "j'aimerais que vous me disiez..." tu devrait dire du "Pourriez vous me dire...", ca fait moins "Ordre"
heu moi je suis pas très fan de ton bout de code, j'aurais fait un truc plus simple, mais plus logique a la fois. j'aurais transformé chaque date en TimeStamp que j'aurais comparé, un peu comme ca :
$timestampDebutPeriode = mktime(0,0,0, 2, 16, 1999); //16 fevrier 1999
$timestampFinPeriode = mktime(0,0,0, 2, 4, 2000); //4 fevrier 1999
voila l'encadrement pour le liévre, maintenant tu fait pareil pour ta date a toi et apres un simple if :
if ($timestampPeriodeDebut>=$timestampMaDate) && ($timestampMaDate>=$timestampPeriodeFin)
$chinois = "lievre";
et voila un if par signe chinois et c'est bon..
PS: Plutot que du "j'aimerais que vous me disiez..." tu devrait dire du "Pourriez vous me dire...", ca fait moins "Ordre"
Yorundr
Messages postés
289
Date d'inscription
mardi 31 octobre 2006
Statut
Membre
Dernière intervention
11 juin 2012
44
28 mai 2009 à 09:09
28 mai 2009 à 09:09
Bonjour,
heu.. je suis pas trés fan de la facon dont ton prof a fait... Il y a plus simple et moins bricolage...
en passant par les timestamp. En gros tu converti chaque date en timestamp et apres tu les compare, c'est beaucoup mieu je trouve
exemple :
$timestampDebutPeriode=mkdir(0,0,0,2,16,1999)//16 fevrier 1999
$timestampFinPeriode=mkdir(0,0,0,2,4,2000)//4 fevrier 2000
$timestampMaDate =...
if ($timestampDebutPeriode>=$timestampMaDate) && ($timestampMaDate <= $timestampFinPeriode)
$chinois = "Lievre";
et tu repete ca pour chaque signe et voila
PS : tu devrait eviter les "j'aimerais que ..." et les remplacer par des "Pourriez vous svp..." ca donnerai moin l'impression que tu nous donne des ordres...
heu.. je suis pas trés fan de la facon dont ton prof a fait... Il y a plus simple et moins bricolage...
en passant par les timestamp. En gros tu converti chaque date en timestamp et apres tu les compare, c'est beaucoup mieu je trouve
exemple :
$timestampDebutPeriode=mkdir(0,0,0,2,16,1999)//16 fevrier 1999
$timestampFinPeriode=mkdir(0,0,0,2,4,2000)//4 fevrier 2000
$timestampMaDate =...
if ($timestampDebutPeriode>=$timestampMaDate) && ($timestampMaDate <= $timestampFinPeriode)
$chinois = "Lievre";
et tu repete ca pour chaque signe et voila
PS : tu devrait eviter les "j'aimerais que ..." et les remplacer par des "Pourriez vous svp..." ca donnerai moin l'impression que tu nous donne des ordres...
Yorundr
Messages postés
289
Date d'inscription
mardi 31 octobre 2006
Statut
Membre
Dernière intervention
11 juin 2012
44
28 mai 2009 à 09:09
28 mai 2009 à 09:09
Bonjour,
heu.. je suis pas trés fan de la facon dont ton prof a fait... Il y a plus simple et moins bricolage...
en passant par les timestamp. En gros tu converti chaque date en timestamp et apres tu les compare, c'est beaucoup mieu je trouve
exemple :
$timestampDebutPeriode=mkdir(0,0,0,2,16,1999)//16 fevrier 1999
$timestampFinPeriode=mkdir(0,0,0,2,4,2000)//4 fevrier 2000
$timestampMaDate =...
if ($timestampDebutPeriode>=$timestampMaDate) && ($timestampMaDate <= $timestampFinPeriode)
$chinois = "Lievre";
et tu repete ca pour chaque signe et voila
PS : tu devrait eviter les "j'aimerais que ..." et les remplacer par des "Pourriez vous svp..." ca donnerai moin l'impression que tu nous donne des ordres...
heu.. je suis pas trés fan de la facon dont ton prof a fait... Il y a plus simple et moins bricolage...
en passant par les timestamp. En gros tu converti chaque date en timestamp et apres tu les compare, c'est beaucoup mieu je trouve
exemple :
$timestampDebutPeriode=mkdir(0,0,0,2,16,1999)//16 fevrier 1999
$timestampFinPeriode=mkdir(0,0,0,2,4,2000)//4 fevrier 2000
$timestampMaDate =...
if ($timestampDebutPeriode>=$timestampMaDate) && ($timestampMaDate <= $timestampFinPeriode)
$chinois = "Lievre";
et tu repete ca pour chaque signe et voila
PS : tu devrait eviter les "j'aimerais que ..." et les remplacer par des "Pourriez vous svp..." ca donnerai moin l'impression que tu nous donne des ordres...
Pour moi la suite est :
if(($annee == 2000 and $jour>=5 and $mois>=2) or ($annee == 2001 and $mois==1 and $jour<23))
{
$chinois = "Dragon";
}
La j'ai utilisé les signes >=...
a=b --> a prend la valeur de b
a==b --> a strictement égal à b
a<b --> a strictement inférieur à b
a>b --> a strictement supérieur à b
a>=b --> a supérieur ou égal à b
a<=b --> a inférieur ou égal à b
a!=b --> a différent de b
Ton prof lui met la date précise de début, la date précise de fin et la fourchette entre les deux.
Là moi j'ai mis la fourchette entre les deux dates.
if(($annee == 2000 and $jour>=5 and $mois>=2) or ($annee == 2001 and $mois==1 and $jour<23))
{
$chinois = "Dragon";
}
La j'ai utilisé les signes >=...
a=b --> a prend la valeur de b
a==b --> a strictement égal à b
a<b --> a strictement inférieur à b
a>b --> a strictement supérieur à b
a>=b --> a supérieur ou égal à b
a<=b --> a inférieur ou égal à b
a!=b --> a différent de b
Ton prof lui met la date précise de début, la date précise de fin et la fourchette entre les deux.
Là moi j'ai mis la fourchette entre les deux dates.
raph0351
Messages postés
369
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
17 mai 2011
14
28 mai 2009 à 09:45
28 mai 2009 à 09:45
as tu essayé de repartir avec un if apré else??
bebertii
Messages postés
165
Date d'inscription
dimanche 15 avril 2007
Statut
Membre
Dernière intervention
25 septembre 2015
26
28 mai 2009 à 09:56
28 mai 2009 à 09:56
Salut,
Je ne mettrais pas un "else", mais un autre "if" et ainsi de suite jusqu'à avoir fait le tour du calendrier.
Cela te permettra de ne pas attribuer un signe à quelqu'un qui aurait entré le 30/02/1985 comme date.
Sinon avec le else, il te faudrait une structure du type :
if
{
valeur 1
}
else
{
if
{
valeur 2
}
else
{
if...
Je ne mettrais pas un "else", mais un autre "if" et ainsi de suite jusqu'à avoir fait le tour du calendrier.
Cela te permettra de ne pas attribuer un signe à quelqu'un qui aurait entré le 30/02/1985 comme date.
Sinon avec le else, il te faudrait une structure du type :
if
{
valeur 1
}
else
{
if
{
valeur 2
}
else
{
if...
romrom7777
Messages postés
65
Date d'inscription
dimanche 27 avril 2008
Statut
Membre
Dernière intervention
30 juin 2009
11
28 mai 2009 à 09:58
28 mai 2009 à 09:58
Bonjour,
if(($annee == 1999 and $jour>16 and $mois==2) or ($annee == 1999 and $mois>2) or ($annee==2000 and $jour<04 and $mois==2) or ($annee==2000 and $mois==1))
{
$chinois = "Lièvre";
}
else if (($annee == 2000 and $jour>5 and $mois==2) or ($annee == 2000 and $mois>2) or ($annee==2001 and $jour<23 and $mois==2) or ($annee==2001 and $mois==1))
{
$chinois = "Dragon";
}
if(($annee == 1999 and $jour>16 and $mois==2) or ($annee == 1999 and $mois>2) or ($annee==2000 and $jour<04 and $mois==2) or ($annee==2000 and $mois==1))
{
$chinois = "Lièvre";
}
else if (($annee == 2000 and $jour>5 and $mois==2) or ($annee == 2000 and $mois>2) or ($annee==2001 and $jour<23 and $mois==2) or ($annee==2001 and $mois==1))
{
$chinois = "Dragon";
}
C'est assez simple .... il s'agit d'algorithme de base....
en php if suffit d'imbriquer les if / else
if (<CONDITION1> == VRAI) {
<Code Action 1>
} else {
if (<CONDITION2> == VRAI) {
<Code Action 2>
} else {
if (<CONDITION3> == VRAI) {
...
}
Pour la condition sur la date chinoise ... réfléchir sur le même principe que ton exemple...
Bref :
va voir des exemple de code PHP, le PHP est un langage assez simple utilisé de façon séquentiel en object c'est une autre affaire .. ;) ;) ;)
en php if suffit d'imbriquer les if / else
if (<CONDITION1> == VRAI) {
<Code Action 1>
} else {
if (<CONDITION2> == VRAI) {
<Code Action 2>
} else {
if (<CONDITION3> == VRAI) {
...
}
Pour la condition sur la date chinoise ... réfléchir sur le même principe que ton exemple...
Bref :
va voir des exemple de code PHP, le PHP est un langage assez simple utilisé de façon séquentiel en object c'est une autre affaire .. ;) ;) ;)