IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

condition IF OR et AND en même temps [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 605
    Points
    4 605
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonsoir,

    Pourrais tu écrires ta condition à plat stp (littéralement)

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut
    Je pense qu'il y a une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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';
    }

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    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)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 605
    Points
    4 605
    Par défaut
    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

  7. #7
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Voici une soluce à ton problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  8. #8
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  9. #9
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 605
    Points
    4 605
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-97] Champ calculé et condition iif en même temps
    Par yatmen dans le forum IHM
    Réponses: 2
    Dernier message: 21/05/2015, 15h08
  2. Manipuler plusieurs champs en même temps selon une condition
    Par Robjerey dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 11/12/2014, 10h05
  3. Les clauses IN et AND en même temps ?
    Par tintin72 dans le forum Débuter
    Réponses: 2
    Dernier message: 16/05/2012, 14h16
  4. 2 fonctions qui tournent en même temps
    Par GOUGOU1 dans le forum C
    Réponses: 7
    Dernier message: 07/12/2002, 18h42
  5. gérer le clic gauche-droite en même temps de la sou
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 29/11/2002, 22h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo