Logique php
nag
-
Yorundr Messages postés 289 Date d'inscription Statut Membre Dernière intervention -
Yorundr Messages postés 289 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai tenté de faire un code php qui me disait l'age, le signe du zodiaque et l'astrologie chinoise des gens.
Donc résultat, les 2 premiers marchent mais j'ai du mal pour le 3e.
Voilà les conditions:
1999 fév. 16 à 2000 fév. 04 = signe astro est lièvre
voici le code que sa donne:
donc j'aimerais que l'on maide à continuer le code.
voila apes ''else''
c'est là que vous dever mettre les condition suivantes:
2000 fév. 05 à 2001 jan. 23 = dragon
De plus, j'aimerais que vous me disiez comment vous avez fait pour faire le bout de code car je ne voit pas la logique de comment le faire. Le premier bout de code provient de mon professeur.
Un gros merci à celui qui réussiras.
J'ai tenté de faire un code php qui me disait l'age, le signe du zodiaque et l'astrologie chinoise des gens.
Donc résultat, les 2 premiers marchent mais j'ai du mal pour le 3e.
Voilà les conditions:
1999 fév. 16 à 2000 fév. 04 = signe astro est lièvre
voici le code que sa donne:
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"; }
donc j'aimerais que l'on maide à continuer le code.
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
voila apes ''else''
c'est là que vous dever mettre les condition suivantes:
2000 fév. 05 à 2001 jan. 23 = dragon
De plus, j'aimerais que vous me disiez comment vous avez fait pour faire le bout de code car je ne voit pas la logique de comment le faire. Le premier bout de code provient de mon professeur.
Un gros merci à celui qui réussiras.
A voir également:
- Logique php
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Et logique excel - Guide
- Lecteur logique ✓ - Forum Windows
- Alert php ✓ - Forum PHP
25 réponses
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
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
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
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
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";
}
}
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";}
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"
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...
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.
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...
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 .. ;) ;) ;)