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 :

problème avec fonction is_int()


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Femme Profil pro
    Etudiante en informatique
    Inscrit en
    Janvier 2013
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante en informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 98
    Points : 95
    Points
    95
    Par défaut problème avec fonction is_int()
    Bonjour à tous amis développeurs,

    J'ai un petit soucis concernant ma fonction is_int, en fait c'est simple elle ne fonctionne pas.
    J'ai fais un champ de recherche, si l'utilisateur rentre un int alors la recherche se fait directement sur les ID alors que si il utilise un string alors la recherche se fait sur le commentaires.
    Pour savoir si cela est un int j'utilise donc is_int, sauf que celle-ci ne fonctionne pas. Après avoir regardé plusieurs messages sur les forums j'ai essayé d'utiliser float, mais cela ne marche pas non plus.
    J'ai essayé en remplaçant ma variable par un 28 et cela fonctionne.
    Il ne me reste plus que vous
    Je vous joins 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
    25
    26
     
    if(!empty($_POST['recherche']))
    {
    	$search = $_POST['recherche'];			 
    	$db = mysql_connect('localhost', 'root', ''); 
    	mysql_select_db('bdd_bilan_annuel',$db); 
     
    	if(is_int($search))
    	{		
    		$sql     = "SELECT * FROM bc WHERE id_bc = $search";
    		$req     = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    		$data    = mysql_fetch_assoc($req);
    	        $type    = $data['type_bc'] ;
    		$comment = $data['comment'] ;
    		$id_sujet= $data['id_sujet'];
    		$id_bilan= $data['id_bilan'];
     
    		$sql     = "SELECT sujet FROM sujet WHERE id_sujet = '$id_sujet'";
    		$req     = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    		$data    = mysql_fetch_assoc($req);
    		$sujet   = $data['sujet'];
     
    		echo "$type, du bilan $id_bilan sujet : $sujet. Commentaire : $comment ";
    	}
    	else echo 'NON';
    }
    Merci d'avance

  2. #2
    Membre averti

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 205
    Points : 409
    Points
    409
    Billets dans le blog
    1
    Par défaut
    Voir la note dans la description de la fonction : http://www.php.net/manual/fr/function.is-int.php
    => "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()."
    si ce post vous a été utile, si votre problème est résolu.
    Pensez-y !
    __________________________________
    Doc officielle PHP | FAQ PHP | Cours PHP

  3. #3
    Membre régulier
    Femme Profil pro
    Etudiante en informatique
    Inscrit en
    Janvier 2013
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante en informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 98
    Points : 95
    Points
    95
    Par défaut
    Pff quel mauvais réflex : se ruer sur les forums au lieu de consulter LE manuel ... Désolé du dérangement, merci a vous

  4. #4
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Alors, d'une tout ce qui est reçu de l'utilisateur est du type chaîne (ou séquence de chaînes). Donc is_int ne fonctionnera pas.

    De deux, pour valider qu'un input est bien un nombre entier on peut procéder comme suit:
    • (PHP 5.2+) if ($value = filter_input(INPUT_POST, 'search', FILTER_VALIDATE_INT))
    • if (isset($_POST['search']) && preg_match('~^[0-9]+$~', $_POST['search']) && $value = (int)$_POST['search'])

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    bonjour,
    tu peux poster ton formulaire?
    on aurait pu s'attendre dans ta requête à un opérateur boolean(OR) du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql     = "SELECT * FROM bc WHERE id_bc = '".$search."' OR champ-string='".$search." '";
    la clause WHERE vérifie si c'est un entier qui a été reçu ou une chaîne.


    Par ailleurs les 2 tables(bc et sujet) étant liées il est inutile de faire 2 requêtes. Une seule requête avec jointure aurait été plus judicieuse en terme de performance.

  6. #6
    Membre régulier
    Femme Profil pro
    Etudiante en informatique
    Inscrit en
    Janvier 2013
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante en informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 98
    Points : 95
    Points
    95
    Par défaut
    Bonjour merci de vos réponses,

    Je ne mettrais pas de OR dans ma requete car en fonction du type (string ou int) le traitement des résultats est différents, donc je réalise le tout en deux parties.
    Et pour les deux requêtes en jointure je suis d'accord, je n'y ai juste pas pensé

  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 : 48
    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,

    Pour les très grands nombres (au-delà des valeurs max supportées pour le type), il est aussi possible d'utiliser ctype_digit() à la place du regex. Plus simple.

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

Discussions similaires

  1. Problème avec fonctions et string/char
    Par vdumont dans le forum C++
    Réponses: 6
    Dernier message: 08/04/2006, 16h54
  2. Problème avec fonction
    Par Goundy dans le forum C
    Réponses: 24
    Dernier message: 01/10/2005, 20h17
  3. [MFC][WINSOCK] Problème avec fonction recv
    Par Le Farfadet dans le forum MFC
    Réponses: 4
    Dernier message: 23/09/2005, 11h00
  4. Problème avec fonction d'envoie de mail
    Par zyg dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 23/02/2005, 08h48
  5. [Requête] Problème avec fonction "DATE_FORMAT()"
    Par sekiryou dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2005, 21h52

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