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

Langage PHP Discussion :

Opérateurs inférieur à et supérieur à


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 329
    Par défaut Opérateurs inférieur à et supérieur à
    Bonsoir,

    J'ai deux colonne dans ma bdd ou je stock des chiffres en mode decimal (en faite des date sous forme 20140301), et je cherche à faire des comparaisons de plage de chiffres du genre :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($chiffre1 <= $row['deb_emp'] AND $chiffre2 >= $row['fin_emp'] AND $verifemp == $row['emplacement']){ //traitement du resultat}
    Donc tous ce qui est compris entre $chiffre1 et $chiffre2 me renvoie un resultat, jusque la pas de soucis, le soucis est que je n'arrive pas à faire les intermédiaires...
    Du genre si $chiffre1 >= et $chiffre2 >=
    Si je traite tous les possibilités (y'a 4 fonctions à faire pour que ça fonctionne) ça ne fonctionne pas correctement même si la condition AND $verifemp == $row['emplacement'] n'est pas remplie.
    Parce normalement si AND $verifemp == $row['emplacement'] n'est pas égale ça devraitt passer sur les if sans s'arreter...

    Est qu'il existe une fonction php qui permette de tous traiter d'un coup? j'ai testé BETWEEN c'est pas mieux.

    Donc la je bloque... Merci de votre aide.

    Cordialement.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Tu mélanges les problèmes, contrôles en premier ta formule,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $chiffre1=50;
    $le1=100;
    $chiffre2=40;
    $le2=10;
    $verifemp =74;
    $le3=74;
     
    if ($chiffre1 <= $le1 AND $chiffre2 >= $le2 AND $verifemp == $le3){ echo "c'est bon<br />";}
    else echo "c'est faux<br />";
    Tu verra que cela marche très bien !
    Alors cela coule de source, ta requête n'est pas contrôlée, et le row n'est pas validé !
    Dernière modification par Bovino ; 02/03/2014 à 10h22.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 329
    Par défaut
    bonjour,

    Merci christele_r pour ton aide, mais justement j'ai déja essayé comme tu me propose la forme est différente mais le fond reste le même... J'ai exactement les mêmes résultats avec ton code.

    Je met ci dessous le code que j'ai mis en forme pour l'exemple de ce que je recherche.

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Test</title>
    </head>
     
    <body>
     
    <?php 
     
    @$date1=$_POST['date_1']; // du formulaire
     
    @$le1=20140305; // variable venant de colonne date_debut de bdd
     
    @$date2=$_POST['date_2']; // du formulaire
     
    @$le2=20140313; // variable venant de colonne date_fin de bdd
     
    @$verifemp=$_POST['verif_emplacement'];
     
    @$le3=74; // variable venant de colonne emplacement de bdd
     
    if ($date1 <= $le1 AND $date2 >= $le2 AND $verifemp == $le3)
    {echo "VRAI 1<br />";}
     
    else if ($date1 >= $le1 AND $date2 <= $le2 AND $verifemp == $le3)
    {echo "VRAI 2<br />";}
     
    else if ($date1 >= $le1 AND $date2 >= $le2 AND $verifemp == $le3)
    {echo "VRAI 3<br />";}
     
    else if ($date1 <= $le1 AND $date2 <= $le2 AND $verifemp == $le3)
    {echo "VRAI 4<br />";}
     
    else{echo "FAUX<br />";}
     
    ?>
    <br />
     
    <form id="form_reservation" name="form_reservation" method="post" action="">
    $date1 :<input name="date_1" type="text" class="Style1" value="<?php if (isset($_POST['date_1'])){echo $_POST['date_1'];} ?>" size="8" />
    $date2 :<input name="date_2" type="text" class="Style1" value="<?php if (isset($_POST['date_2'])){echo $_POST['date_2'];} ?>" size="8" />
    $verifemp :<input name="verif_emplacement" type="text" class="Style1" value="<?php if (isset($_POST['verif_emplacement'])){echo $_POST['verif_emplacement'];} ?>" size="4" />
    <input name="submit" type="submit" value="envoi" /> 
    </form>
    <br />
     
    Date à vérifier pour l'exemple:<br />
    $le1 = 20140305<br />
    $le2 = 20140313<br />
    $verifemp = 74<br /><br />
     
    Doit retourner FAUX si les dates saisies dans le formulaire sont différentes<br />
    de la fourchette de dates envoyées par le formulaire: <br /><br />
     
     
    RESULTAT :<br />
     
    SI $date1 <= $le1 AND $date2 >= $le2 AND $verifemp == $le3 (VRAI 1) ok <br />
     
    SI $date1 >= $le1 AND $date2 <= $le2 AND $verifemp == $le3 (VRAI 2) ok <br />
     
    SI $date1 >= $le1 AND $date2 >= $le2 AND $verifemp == $le3 (VRAI 3) ok <br />
     
    SI $date1 <= $le1 AND $date2 <= $le2 AND $verifemp == $le3 (VRAI 4) ok <br />
     
    </body>
    </html>
    Le code ci-dessus fonctionne parfaitement, donc il n'y a pas de soucis me direz-vous !

    Le soucis est que si je teste toutes les possibilités comme ci-dessus, pour le fonctionnement que je désire les
    dates en dessous de la fourchettes, ou au dessus de la fourchettes saisies ma retourne VRAI 1 ou 2 ou 3 ou 4.
    Ce qui est tout à fait normal puisque je les testes dans les conditions mises en places.

    LA EST MON SOUCIS !
    Comment faire pour prendre en compte uniquement la fourchette que j'envoie mais pas si c'est pas dedans (un peu bizarre comme phrase).

    Voila j'espère avoir pu clarifier mon problème pour ceux qui me liront jusqu'au bout.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Donc, bien que ne parlant pas français, je devines vaguement que tu essais de dire,
    comment éviter un test si un $_POST est absent ? c'est cela

    Alors testes tes POST comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $date1=(isset($_POST['date_1'])) ? $_POST['date_1'] : "";
    $date2=(isset($_POST['date_2'])) ? $_POST['date_2'] : "";
    /* etc..== et plus loin == */
    if($date1!="" && if ($date1 >= $le1 AND $date2 <= $le2 AND $verifemp == $le3)
    {echo "VRAI 2<br />";}
    Et vires moi tes "@$"

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 329
    Par défaut
    non c'est pas du tout cela, je sait traiter les variables vides ou absentes, etc... j'utilise isset ou empty, etc... habituellement mais la pour les tests et que le serveur ne me renvoie pas des erreurs de variables vides j'ai utilisé @ mais dans le code propre ils n'y sont plus.

    Je t'explique ma démarche le code que je recherche va servir à vérifier qu'une place est libre sur une plage de date qui sont postés par un formulaire et comparées aux dates inscrites dans la bdd, en vérifiant la place qui est posté elle aussi.

    Je vais essayé de formulé ma requêtes:
    Si je post une plage de date et qu'une des dates postées et la place correspond à une plage de date de la bdd ça me renvoie une alerte.

    J'essaie d'être aussi clair que je peut... Une sorte de planning en quelques sorte...

    Les date sous le format aaaa-mm-jj sont facile à comparées en les convertissant en décimal. Mais la n'est pas le pb.

    Tu voit ce que je veut dire ?

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Les 4 cas de superposition se resument à in seule condition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $debut <= $row['fin_emp'] && $fin >= $row['deb_emp']
    Par contre ne pas utiliser un DATETIME est une erreur.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. Between borne inférieure et supérieure
    Par AsQuel dans le forum Requêtes
    Réponses: 3
    Dernier message: 10/01/2011, 16h52
  2. Arrondir à l'heure à l'inférieur ou supérieur
    Par arnaudperfect dans le forum Excel
    Réponses: 4
    Dernier message: 12/05/2009, 13h03
  3. [E-03] trouver les valeurs inférieur et supérieur d'un nombre
    Par kristoch91 dans le forum Macros et VBA Excel
    Réponses: 38
    Dernier message: 30/10/2008, 15h28
  4. Réponses: 10
    Dernier message: 06/03/2007, 14h36
  5. [pl/sql]dizaine inférieure et supérieure d'un nombre
    Par Fleur-Anne.Blain dans le forum Oracle
    Réponses: 8
    Dernier message: 18/08/2006, 14h49

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