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 :

Fonction de Gestion des variables : is_int()


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2011
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Fonction de Gestion des variables : is_int()
    Bonjour à tous.

    Je poste pour la première fois sur un forum ayant sujet au php.
    J'ai jusqu'ici réussis à trouver avec google et autre les solutions à mes problèmes, sachant que pour la plus part des cas, quelqu'un a déjà rencontrer un problème similaire.

    Je viens vers vous cette fois car malgré les tests différents et les recherches sur de nombreux forum, je ne trouve pas la solution.

    Tout betement, je veux vérifier :
    • si une variable existe,
    • si c'est un numérique, (inutile quand j'utilise la vérification suivante je pense)
    • si c'est un entier.


    Ayant tester dans plusieurs sens, je ne comprend pas pourquoi pour le nombre entier quelquonque, la vérification de l'entier me renvois false et m'affiche donc le message d'erreur contenue dans l'else.
    Je récupère la variable avec extract ($_POST);
    Et le fais que le message d'erreur s'affiche prouve que la variable existe. sinon il ne ferait même pas le test.

    Je débute en php et il se peut que je ne code pas dans les règles ou que j'utilise des vérifications inutiles, mais Merci du coup de main.
    Voici mon code :

    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
     
    if (!empty ($time_heure))
    {
    	if (is_numeric($time_heure))
    	{
    		if (is_int($time_heure))
    		{
    			echo $valid_time;	
    		}
    		else
    		{
    		 	echo "Ce n'est pas un entier.";
    		 	$erreur++;
    		}
    	}
    	else
    	{
    		echo "Ce n'est pas un nombre";
    	}
    }
    else
    {
    $control_time = 1;		
    }
    Merci à tous d'avance.

  2. #2
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 387
    Points
    9 387
    Par défaut
    $_POST comme toutes les autres variables superglobales considèrent que les variables sont de type String.
    Chose que tu pourrais constater avec var_dump() de ta variable.

    Je te conseille donc de passer par intval() et vérifier que le retour de intval() est égal à la chaîne de caractères (en raison de la flexibilité de PHP à convertir des nombres d'une chaîne de caractères en nombre.)

    Dans le cas d'une chaîne de caractère qui n'est pas un entier le retour de intval() sera 0 ce qui sera forcement différent de ta chaîne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    intval("10.1") == "10.1" => false
    intval("10") == "10" => false
    intval("test") == "test" => false

  3. #3
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Le principe général me semble correcte, sauf peut être un qui demande précision.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (!empty ($time_heure))
    {
     
    }
    empty() inclus la valeur 0 (et même "0"), pourtant, 0 est non seulement un numérique, mais aussi un entier.
    Si le but est d'obtenir des valeurs strictement supérieurs à 0, alors Ok, sinon ça va pas.
    0 est vraiment un cas particulier, de même que false peu semer la zizanie.

    Le plus simple c'est de se référer à la doc concernant : empty()
    Et faire des essai.


    Je récupère la variable avec extract ($_POST);
    Je te déconseils d'utiliser extract() comme ça sans une véritable raison, surtout sans tenir compte du contexte.
    Là encore, extract() est très particulier, lis la doc pour t'en rendre compte :
    extract()

  4. #4
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2011
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonsoir. Merci pour vos réponses.

    Je viens d'appliquer intval() comme tu me l'as conseillé transgohan et cela fonctionne, Merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ($time_heure == intval($time_heure))
    Pourrais tu juste, me préciser ce que l'on considéré comme "type String" ?
    Ça ne me parle pas, même si je l'ai lu à plusieurs reprise dans le manuel php, je n'ai jamais eu à chercher des infos dessus. Si jamais tu n'as pas le temps d'y répondre je ferais une recherche.

    Citation Envoyé par RunCodePhp Voir le message
    Salut

    Le principe général me semble correcte, sauf peut être un qui demande précision.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (!empty ($time_heure))
    {
     
    }
    empty() inclus la valeur 0 (et même "0"), pourtant, 0 est non seulement un numérique, mais aussi un entier.
    Si le but est d'obtenir des valeurs strictement supérieurs à 0, alors Ok, sinon ça va pas.
    0 est vraiment un cas particulier, de même que false peu semer la zizanie.

    Le plus simple c'est de se référer à la doc concernant : empty()
    Et faire des essai.


    Je te déconseils d'utiliser extract() comme ça sans une véritable raison, surtout sans tenir compte du contexte.
    Là encore, extract() est très particulier, lis la doc pour t'en rendre compte :
    extract()

    RunCodePhp, merci pour tes conseils mais j'aimerais quelques précisions. Pour bien en comprendre tout le sens.

    Dans le cas présent, j'utilise (!empty) car je souhaite juste savoir si la variable est remplie et qu'elle ne correspond pas à 0. ( Je vérifie si l'utilisateur à préciser un Time heure ou minute. Même s'il a mis 0 heure je souhaite que la le script ne continue pas. J'ai donc pensé que "empty" était plus approprié que "isset" ou autre...( que je ne connais surement pas.)

    Si tu penses que je devrais faire ce contrôle d'une autre manière je veux bien avoir ton avis. Mais pour le moment, "empty" à réussis les tests que j'ai pu faire.

    Sinon tu me conseilles d'être prudent avec extract(), pour quelle raison ? Dans cette situation je récupère les données d'un formulaire de 15 variables envoyés par Post. Les données transmises ne peuvent arriver que par une seul page.

    Une petite question me vient à l'esprit en écrivant ces lignes...

    Peut-on appliquer en une ligne la fonction "htmlentities()" à toutes les variables récupérer par Post. Du style :

    extract (htmlentities($_POST));

    ou dans le genre.

    Dans tous les cas, Merci pour votre aide précieuse et merci à tous ceux qui font vivre les forums php car sans eux je serais bien perdu ...

    Bonne soirée.

    Ykouko

  5. #5
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 387
    Points
    9 387
    Par défaut
    Sinon tu me conseilles d'être prudent avec extract(), pour quelle raison ? Dans cette situation je récupère les données d'un formulaire de 15 variables envoyés par Post. Les données transmises ne peuvent arriver que par une seul page.
    C'est totalement faux, rien ne m'empêche de créer mon propre formulaire sur mon ordinateur et de le faire pointer vers ton script.
    Ainsi si tu as une variable $id qui défini l'identifiant de la personne connectée je n'ai qu'à me créer un champs input de name id qui contiendra l'id de l'administrateur pour écraser ta variable.

    extract (htmlentities($_POST));
    Non mais cela peut être fait rapidement avec une boucle foreach :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    foreach($_POST as $key => $valeur)
      $_POST[$key] = htmlentities($valeur);
    Cependant c'est une fonction qu'on utilise généralement à l'affichage et non pour traiter le retour d'un formulaire...

    Pourrais tu juste, me préciser ce que l'on considéré comme "type String" ?
    Le type String correspond au type Chaîne de caractères en algorithme.

  6. #6
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Si le but est d'obtenir des valeurs strictement supérieurs à 0, alors Ok, sinon ça va pas.
    'utilise (!empty) car je souhaite juste savoir si la variable est remplie et qu'elle ne correspond pas à 0.
    Donc c'est bon.

    Sinon tu me conseilles d'être prudent avec extract(), pour quelle raison ?
    Si tu ne lis pas la doc, tu ne sauras pas pourquoi.

    Il est dit, je cite :
    Avertissement
    N'utilisez pas extract() sur des données inconnues, comme les données utilisateurs (i.e. $_GET, $_FILES, etc.).
    ... etc ...
    Donc y compris $_POST.

    Vu que tu débute, je ne suis pas certain que tu as bien pris en compte ce que provoque cette fonction.
    A une époque (Php4), beaucoup l'utilisait à tord et de travers.
    Ce qui s'appelle un vrai fausse bonne idée.

    Le piège de cette fonction appliquée sur des données extérieurs comme POST, GET, etc ... c'est que ça incite d'abord à minimiser les vérifications sur ces données qui pourtant demande des précautions.

    Mais pire, faut bien percevoir quelle va extraire absolument toutes les données contenu dans le tableau, et les convertir en variable.
    Donc pas seulement celles que ton code va prévoir de vérifier, mais toutes les autres qu'un pirate plus malin que les autres pourra rajouter.
    Par conséquent on ouvre une porte, de donner la possibilité à quelqu'un d'injecter des données non désirées.


    Cette fonctionne utilisée dans ce contexte là est inévitablement un manque de sécurité.

    Mais c'est pas tout, cette fonction effectue encore d'autres opérations qui peuvent avoir des effets indésirables.
    Voir la doc.


    Vois tu mieux ?

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    tout ça se fait avec filter
    regarde du coté de filter_input(_array)

  8. #8
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2011
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Je n'avais pas compris entièrement le sens de cette phrase, et $_post n'étant pas citer

    Avertissement
    N'utilisez pas extract() sur des données inconnues, comme les données utilisateurs (i.e. $_GET, $_FILES, etc.).
    ... etc ...
    Merci pour la précision. J'avais pourtant lu la doc mais comme il y a souvent beaucoup à lire je focus sur ce qui me parle.


    tout ça se fait avec filter
    regarde du coté de filter_input(_array)
    Merci stealth35 pour cette précision. j'ai suivis ce lien et il me parait très intéressant. Merci à vous en tout cas et bonne continuation.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/01/2008, 17h55
  2. Gestion des variables d'un document
    Par philben dans le forum Contribuez
    Réponses: 1
    Dernier message: 12/01/2008, 21h47
  3. Gestion des variables de session
    Par Yoplaboum dans le forum Struts 1
    Réponses: 8
    Dernier message: 09/11/2007, 16h07
  4. gestion des Variables Sessions
    Par Landolsi dans le forum ASP.NET
    Réponses: 8
    Dernier message: 08/02/2007, 13h30
  5. Gestion des variables - mémoire ?
    Par RIVOLLET dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2002, 12h44

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