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 :

Problème avec condition if + is_int


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Par défaut Problème avec condition if + is_int
    Bonjour,

    J'ai un problème avec ma condition if, je fais ça :
    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
     
    $forumSujet=htmlentities(mysql_real_escape_string($_GET['forumSujet']));
    if
    (
    $forumSujet>=1 
    AND $forumSujet<=11 
    AND is_int($forumSujet)
    )
    {
    instruction
    ;}
    else
    {
    echo'flute'
    ;}
    $_GET['forumSujet'] est récupéré par l'URL et est un nombre entier, par exemple 5.

    Si j'enlève is_int($forumSujet) de la condition if, alors l'instruction est effectuée, mais si je le laisse et je dois le laisser, alors c'est l'instruction else{} qui est effectuée.

    Qu'est-ce que je n'ai pas pigé avec is_int, s'il-vous plait ?

  2. #2
    Membre Expert Avatar de Bebel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2003
    Messages : 786
    Par défaut
    regarde ici cela devrait repondre a ta question

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Par défaut
    Salut Bebel,

    J'ai lu le lien mais honnêtement je ne vois pas où il y a une erreur dans mon code, à priori ils utilisent is_int() de la même manière dans leurs exemple (si ce n'est un qui place la fonction comme suit (is_int($var)) à l'intérieur du if(), mais j'ai essayé ça ne change rien au problème

  4. #4
    Membre habitué
    Inscrit en
    Août 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 17
    Par défaut
    Dans le lien donné par Bebel, on peut lire :

    Note : Pour tester si une variable est un nombre ou une chaîne numérique (comme les entrées de formulaire, qui sont toujours des chaînes), vous devez utiliser la fonction is_numeric().

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Par défaut
    Oui mais je me suis trompé je veux tester si la variable est un nombre entier, pas seulement un nombre.

  6. #6
    Membre habitué
    Inscrit en
    Août 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 17
    Par défaut
    Tu peux aller voir du côté des conversions de chaînes

    Sinon, baguette magique RegExp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if(ereg("^[0-9]+$", $forumSujet) {
       ...
    }

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Par défaut
    Bon d'accord je vais me débrouiller, mais quand même y'a un truc qui m'échappe.

    is_int($var) est censé tester si $var est un nombre entier. Comme la fonction est un bool ça me renvoit true ou false le cas échéant.
    Normalement c'est simplissime ça devrait fonctionner.

  8. #8
    Membre habitué
    Inscrit en
    Août 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 17
    Par défaut
    Avec la regexp, ça fonctionnera.

    Sinon :
    is_int -- Détermine si une variable est de type nombre entier
    type nombre entier, et toi tu récupères un type string.
    Du coup is_int() te retourne false et l'instruction passe directement au else.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Par défaut
    Qu'est-ce que tu veux dire quand tu dis que je récupère un string (sans jeu de mot douteux hein) ?

    Normalement ma variable a pour valeur un entier numérique. Je devrai faire is_int(5) par exemple ?
    J'ai rien pigé, j'ai un truc à comprendre je crois.

  10. #10
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    1) parentheses autour de CHAQUE condition dans le if (if ((cond1)&&(cond2)&&(cond3)) {...})
    2) && au lieu de AND

    Permet moi aussi de te dire que ton code est illisible je trouve... tu choisis les conventions que tu veux, mais en général on fait pas comme ca...

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Par défaut
    Admettons que mon code soit illisible, j'ai pas la prétention d'être un pro.
    Toi tu ferais comme ça ?

    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
    $forumSujet=htmlentities(mysql_real_escape_string($_GET['forumSujet']));
    if
    (
    ($forumSujet>=1 )
    && 
    ($forumSujet<=11 )
    && 
    (is_int($forumSujet))
     
    )
    {
    instruction
    ;}
    else
    {
    echo'flute'
    ;}
    Je trouve pas ça plus lisible mais bon. Pourquoi && à la place de AND et pourquoi placer chaque condition entre (), s'il te plait ?

    **edit** en tout cas même écrit comme ça ça foire quand même.

  12. #12
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Salut,

    $var = "5";
    $var est un string.
    is_int($var) retourne false.

    $var = 5;
    $var est un int.
    is_int($var) retourne true.

    Bye

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Par défaut
    Citation Envoyé par Djakisback
    Salut,

    $var = "5";
    $var est un string.
    is_int($var) retourne false.

    $var = 5;
    $var est un int.
    is_int($var) retourne true.

    Bye
    Bon là c'est clair, maintenant moi je récupère 5 depuis l'url, donc dans $_GET['$var'].
    Ensuite par commodité je fais $var=$_GET['$var'] avec htmlentities et mysql_real_escape_string au passage.

    Comment se fait-il que mon 5 soit devenu un string entretemps ?

  14. #14
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Tout ce que tu passes en get ou post est converti en string sauf si tu utilises sérialize() il me semble.

  15. #15
    Membre Expert
    Avatar de guitou12
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 077
    Par défaut
    Citation Envoyé par JackBeauregard
    Comment se fait-il que mon 5 soit devenu un string entretemps ?
    string mysql_real_escape_string ( string unescaped_string [, resource link_identifier] )

    string htmlentities ( string string [, int quote_style [, string charset]] )

    Pour ça !
    Ex développeur Php / J2EE.
    Actuellement reconverti à SharePoint 2013

    Mon blog SP 2013

  16. #16
    Membre émérite Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2006
    Messages : 858
    Par défaut
    Pour revenir au && a la place du AND : Quelle est la difference ? L'utilité ? Car sinon je m'y met au &&

  17. #17
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    Citation Envoyé par JackBeauregard
    Toi tu ferais comme ça ?
    Non, comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $forumSujet=htmlentities(mysql_real_escape_string($_GET['forumSujet']));
    if (($forumSujet>=1 ) && ($forumSujet<=11 ) && (is_int($forumSujet))) {
       instruction;
    } else {
       echo'flute';
    }
    ou :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $forumSujet=htmlentities(mysql_real_escape_string($_GET['forumSujet']));
    if (  ($forumSujet>=1 ) 
       && ($forumSujet<=11 ) 
       && (is_int($forumSujet))) {
     
       instruction;
    } else {
       echo'flute';
    }
    maintenant, oui, il est normal que is_int renvoie FALSE car ce n'est pas de type INT, c'est de type STRING et ca contient un INT. Donc is_numeric est plus approprié. Pour t'en convaincre, il suffit d'ajouter
    et tu devrais obtenir qqchose comme String(1) : "1"
    et non integer : 1

    Si tu veux vraiment interdire les valeurs décimales, tu peux convertir d'abord et faire la condition ensuite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if (is_numeric($forumSujet)) {
      $forumSujet+=0; // ca va convertir en nombre
      // $forumSujet = int_val($forumSujet); // autre possibilité
      // $forumSujet = (int)$forumSujet; // autre possibilité
      // $forumSujet*=1; // autre possibilité
    }
     
    if (... is_int($forumSujet)...) {
    ...
    }

  18. #18
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    Citation Envoyé par Elwyn
    Pour revenir au && a la place du AND : Quelle est la difference ? L'utilité ? Car sinon je m'y met au &&
    http://fr2.php.net/manual/fr/languag...ors.precedence

    La différence est dans les priorités... mais si tu met des parentheses explicite, tu ne te pose pas de question sur les priorités, donc tu peux utiliser celui que tu veux...

    maintenant je prefere reserver && et || aux operations logiques dans les if, et utiliser "or" dans les lignes genre mysql_... or die(...)

    Quand au "and"... et bien je ne l'utilise pas ;o)

    mais en fait, je suis d'accord, ca depend de chacun... je pensais qu'il s'agissait des operateurs binaires mais je me suis trompé, les operateurs binaires sont & et |

Discussions similaires

  1. problème avec condition " if " et "liste" pour programme
    Par hypnotief dans le forum Général Python
    Réponses: 10
    Dernier message: 22/03/2011, 21h49
  2. [AC-2007] problème avec condition If et And
    Par Rémi GAUDINAT dans le forum VBA Access
    Réponses: 3
    Dernier message: 21/06/2010, 19h05
  3. Problème avec condition IF
    Par bambino13 dans le forum ASP
    Réponses: 7
    Dernier message: 04/05/2009, 23h50
  4. Parcourir ligne - Problème avec conditions
    Par JP1983 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 17/02/2008, 22h29
  5. Réponses: 6
    Dernier message: 15/06/2006, 15h15

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