Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/01/2012, 00h08   #1
Nouveau Membre du Club
 
Inscription : janvier 2011
Messages : 146
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 146
Points : 26
Points : 26
Par défaut condition IF OR et AND en même temps

Bonsoir

J'ai cette condition que je n'arrive pas a traduire :

Code php :
1
2
3
4
5
6
7
8
9
10
11
if ($jour_d>=15 && $mois_d>=2 && $jour_f<=15 && $mois_f<=3 || $jour_d>=1 && $mois_d>=4 && $jour_f<=1 && $mois_f<=5 || 
$jour_d>=1 && $mois_d>=7 && $jour_f<=31 && $mois_f<=8 ||
 $jour_d>=21 && $mois_d=10 && $jour_f<=31 ||
 $jour_d>=24 && $mois_d>=12 && $jour_f<=1 && $mois_f<=1 )
{
$periode='haute saison';
}
else 
{
$periode='basse saison';
}

jour_d correspond au jour d'arrivé
jour_f au jour de départ

Idem pour mois_d et mois_f

En gros si la date saisi par la personne est dans l'interval $periode prend la chaine de caractère 'haute saison' .

Après test mon programme passe le if est le else sans tenir compte de la valeur du coup je n'est pas ce que souhaite .

Je n'arrive pas non plus a retraduire ma condition avec le case

Merci d'avance si quelqu'un peut me tuyauter
tanaka59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 00h29   #2
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Bonsoir,

Pourrais tu écrires ta condition à plat stp (littéralement)
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 08h39   #3
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
Je pense qu'il y a une erreur

Code :
1
2
3
4
5
6
7
8
9
10
11
12
if ($jour_d>=15 && $mois_d>=2 && $jour_f<=15 && $mois_f<=3 || $jour_d>=1 && $mois_d>=4 && $jour_f<=1 && $mois_f<=5 || 
$jour_d>=1 && $mois_d>=7 && $jour_f<=31 && $mois_f<=8 ||
 $jour_d>=21 && $mois_d=10 && $jour_f<=31 ||
 $jour_d>=24 && $mois_d>=12 && $jour_f<=1 && $mois_f<=1 )
{
 
$periode='haute saison'; //la valeur n'était pas dans la condition
}
else 
{
$periode='basse saison';
}
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 10h45   #4
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Bonjour,

Je pense qu'il serait beacoup plus judicieux de travailler avec des dates. En y regardant de plus près, ta haute saison correspond aux dates suivantess :
Code :
1
2
3
4
5
// 15/02/N -> 15/03/N
// 01/04/N -> 01/05/N
// 01/07/N -> 31/08/N
// 21/10/N -> 31/10/N
// 24/12/N -> 01/01/N+1
Est-ce la date du début du séjour, ou sa fin ou les deux qui doivent être pris en compte ? Si un séjour commence en haute saison et se termine en basse saison, comment tu catégorises le séjour ? Et inversement ?
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 11h09   #5
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 671
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 671
Points : 5 404
Points : 5 404
Je plussoie rawsrc. Peut-être que tu pourrais nous donner une valeur d'exemple avec laquelle tu testes ?
Au passage, ta 4e condition n'a pas de mois de fin spécifié : $jour_d>=21 && $mois_d=10 && $jour_f<=31
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 11h15   #6
Nouveau Membre du Club
 
Inscription : janvier 2011
Messages : 146
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 146
Points : 26
Points : 26
Bonjour

Alors je m’aperçois que j'ai pas expliqué un truc . Reprenons

Tout d'abord , c'est le client lambda qui passe une commande via un formulaire.

Il renseigne plusieurs champs comme la destination , le nombre de place qu'il souhaite pour cette destination. Il est aussi invité à saisir 2 date via un "select " dans le formulaire html. Un select pour le jour, le mois et l'année . Il répète deux fois l’opération ( date début et fin ).

Une fois le formulaire rempli on envoi les infos dans une page qui va traiter les info du client.

La date début et fin doivent se trouver obligatoirement dans l’interval sinon la haute saison ne peut s'appliquer.

Si l'une des deux date déborde de l'interval on ne respecte pas la condition et on prend basse saison

// date debut -> date fin

Exemple la date début est le 15 juillet et la date de fin le 31 septembre , la condition n'est pas respecté .

Autre exemple la date début est le 12 juin et fin le 17 aout , la condition n'est pas non plus respecté .

// 15/02/N -> 15/03/N
// 01/04/N -> 01/05/N
// 01/07/N -> 31/08/N
// 21/10/N -> 31/10/N
// 24/12/N -> 31/12/N
tanaka59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 12h00   #7
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Voici une soluce à ton problème :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
 
// form : dates debut
$dj = 15;
$dm = 2;
$da = 2012;
// form : dates fin
$fj = 29;
$fm = 2;
$fa = 2012;
 
$debut = new DateTime("$da-$dm-$dj");
$fin   = new DateTime("$fa-$fm-$fj");
 
$curYear = date('Y');
$nextYear = $curYear + 1;
 
$datesHauteSaison = array(
   array(new DateTime("$curYear-02-15"), new DateTime("$curYear-03-15")),
   array(new DateTime("$curYear-04-01"), new DateTime("$curYear-05-01")),
   array(new DateTime("$curYear-07-01"), new DateTime("$curYear-08-31")),
   array(new DateTime("$curYear-10-21"), new DateTime("$curYear-10-31")),
   array(new DateTime("$curYear-12-24"), new DateTime("$nextYear-01-01"))
);
 
$hauteSaison = false;
 
foreach($datesHauteSaison as $dates) {
   if (($debut >= $dates[0]) && ($fin <= $dates[1])) {
      $hauteSaison = true;
      break;
   }
}
 
echo ($hauteSaison) ? 'haute' : 'basse', ' saison';
 
?>
Est-ce que tu as pensé au cas suivant : début = 15/03/2012 et fin = 01/04/2012 => les deux dates sont dans la plage de haute saison, mais je ne pense pas que le client ait choisi la haute saison, non ?

L'intérêt d'utiliser les dates au lieu des composants des dates (jma) c'est que tu peux utiliser toutes les fonctions dates natives (calcul de la durée du séjour (en tenant compte automatiquement des années bissextiles), longs séjours, dates à cheval sur 2 années...) bref que des avantages.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 13h47   #8
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 671
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 671
Points : 5 404
Points : 5 404
Citation:
Envoyé par rawsrc Voir le message
Est-ce que tu as pensé au cas suivant : début = 15/03/2012 et fin = 01/04/2012 => les deux dates sont dans la plage de haute saison, mais je ne pense pas que le client ait choisi la haute saison, non ?
Je pense que la condition "haute saison" c'est que la date de début et la date de fin appartiennent au même intervalle (histoire d'éviter le cas dont tu parles)
Le code de rawsrc deviendrait donc :
Code :
1
2
3
4
5
6
foreach($datesHauteSaison as $dates) {
   if (($debut >= $dates[0]) && ($debut <= $dates[1]) && ($fin >= $dates[0]) && ($fin <= $dates[1])) {
      $hauteSaison = true;
      break;
   }
}
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 14h45   #9
Nouveau Membre du Club
 
Inscription : janvier 2011
Messages : 146
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 146
Points : 26
Points : 26
Salut , c'est bon j'ai plus tester le code marche , j'ai adapté selon mes besoin le code .

Je ne saurais trop comment vous remercier pour l'aide

Encore merci
tanaka59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h24.


 
 
 
 
Partenaires

Hébergement Web