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 :

Comparaison d'une string à l'entier zéro


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 53
    Par défaut Comparaison d'une string à l'entier zéro
    Bonjour à tous,
    Je rencontre un petit problème, la comparaison 'string' == 0 renvoi... true !

    Autrement dit si je tape :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if('banane' == 0) {
    echo 'incohérence';
    } else {
    echo 'cohérence';
    }
    L'écran affichera 'incohérence'.

    Cela peut sembler ridicule, mais ce grain de sel s'avère extrêmement problématique pour moi, je m'explique rapidement, afin que vous compreniez mieux :
    Je développe actuellement un site, qui présente des listes de données. En haut de l'écran, j'ai placé quatre listes déroulantes (<select><option>), permettant de filtrer les données affichées à l'écran.
    Actuellement, je cherche à conserver sélectionnée la valeur choisit dans la liste déroulante, et ce, même après avoir posté le formulaire.
    Pour cela, une fonction test la liste des <option>, et lui ajoute 'selected' si la value du <option> correspond à la valeur postée.
    Le problème est que certaines de ces values valent 0, et que lorsque la fonction les compare à une valeur postée valant une string, elle ajoute à tord le 'selected' car pour elle 'string' = 0.

    Exemple concret :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if($_POST['filtre1'] == $value) {
    $listeOptions .= '<option selected...................etc></option>';
    } else {
    $listeOptions .= '<option...................etc></option>';
    }
    Dans cette exemple, si la valeur postée est égale à 'indifferent' (valeur par défault du filtre => l'utilisateur veut afficher toutes les données), lorsque la value vaudra $value = 0, la fonction jugera 'indifferent = 0 et ajoutera le 'selected' pour la value 0, alors qu'elle aurait du le faire pour la value 'indifferent'.

    Avez-vous une idée simple, pouvant m'éviter de recommencer l'ensemble de la structure de mon site ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Utilise l'opérateur de comparaison ===
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump('test' === 0); // false
    Le problème vient du fait que sur une comparaison classique PHP doit transtyper ta chaine en entier et que n'importe quel chaine en entier ça fait 0.

    Dans n'importe quel langage typé ça te serais pas venu à l'esprit d'essayer de comparer un String avec un Integer

    Sinon tu peux aussi faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if('banane' == (string)$value)
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 53
    Par défaut
    Le === pose problème, car je crois qu'à gauche j'ai toujours des strings, donc même un '0' === 0 ne passerait pas x)
    Du coup oui, j'vais tester de changer mon entier en string, pas bête.

    Merci beaucoup !

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 53
    Par défaut
    Fonctionne impeccablement bien merci !

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

Discussions similaires

  1. entier vers hexa dans une string
    Par Invité dans le forum Général Python
    Réponses: 10
    Dernier message: 15/07/2012, 17h47
  2. lecture de plusieurs entiers depuis une string.
    Par hpfx dans le forum Débuter
    Réponses: 1
    Dernier message: 13/04/2009, 12h22
  3. Comparaison d'une liste de string à un string
    Par maxazac dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 19/10/2005, 15h39
  4. Ajouter a une variable de type string, un entier
    Par Little-Freud dans le forum SL & STL
    Réponses: 12
    Dernier message: 05/03/2005, 19h33
  5. mettre un entier dans une string
    Par kinder29 dans le forum SL & STL
    Réponses: 14
    Dernier message: 14/02/2005, 11h54

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