Logique php
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.
Configuration: Windows XP Internet Explorer 7.0
25 réponses
Résumé de la discussion
Une demande porte sur l'attribution du signe astrologique chinois à partir d'une date en PHP, l'intervalle 1999-02-16 à 2000-02-04 donnant Lièvre comme premier signe et comment l'intégrer dans un script fiable. Plusieurs réponses suggèrent d'utiliser une structure conditionnelle en cascade (if/else if) pour tester chaque intervalle et attribuer le signe approprié, ou d'employer des timestamps pour des comparaisons simples et robustes. La méthode retenue dans l'échange peut être soit une suite d'else if couvrant Dragon, Lièvre et les autres signes, soit une conversion date AAAAMMJJ pour des tests directs et lisibles.
-
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... -
Bonjour,
Je penserais à un truc comme ça,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 < 25 and $mois == 1 ) ) { $chinois = "Dragon"; }
Voilà. -
1999 fév. 16 à 2000 fév. 04 = signe astro est lièvre
f(($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 == 1999 and $jour > 16 and $mois > 2)
$astro = "lièvre";
if($anne == 2000 and $jour < 4 and $mois <= 2)
$astro = "liévre";
}
ca devrait faire l'affaire ;) -
ContributeurBonjour,
en principe si tu as compris la logique des signes chinois et le code de ton professeur,
la suite devrait aller toute seule. Voici la méthode à suivre a minima :
1) Trouver les conditions pour les autres signes.
2) Les traduire en code en t'inspirant du code de ton prof.
3) Enchaîner les codes php de la manière suivante :
Si (condition_lièvre = vérifiée)
alors Signe = lièvre
Sinon Si (condition_cochon = vérifiée)
alors Signe = cochon
Sinon Si ...
...et ainsi de suite.
Ce qui se traduira en php par quelque chose du style :
if ( condition1)
résultat1;
else if (condition2)
resultat2;
else if ...
etc.
Bon codage.
-
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>05 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";
}
et ainsi de suite -
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 .. ;) ;) ;) -
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";
} -
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... -
as tu essayé de repartir avec un if apré else??
-
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. -
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... -
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... -
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" -
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";} -
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. -
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";
}
} -
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 == 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. -
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 -
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
- 1
- 2
Suivant