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 :

if !empty avec une valeur par defaut null (SQL)


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    noobies
    Inscrit en
    Décembre 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : noobies

    Informations forums :
    Inscription : Décembre 2014
    Messages : 103
    Points : 51
    Points
    51
    Par défaut if !empty avec une valeur par defaut null (SQL)
    Bonjour,

    je souhaite changer la couleur d'une cellule si la colonne est vide mais le fais d'avoir la valeur par défaut null elle est considérée comme pleine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if (!empty($donnees['COL 18']))
    je vois pas comment y remédier.

    merci

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Simple erreur de logique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (empty($donnees['COL 18']))
    Tu peux être plus explicite avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($donnees['COL 18'] === null)
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (is_null($donnees['COL 18']))
    Si ça ne résout pas le problème, fait un var_dump de $donnees['COL 18'] et poste le.

    (Pas très parlant comme nom de colonne "COL 18".)
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 912
    Points
    38 912
    Billets dans le blog
    9
    Par défaut
    il ne faut pas confondre "null" et chaîne de caractères vide.

    Null n'est pas une valeur, mais un marqueur d'absence de valeur.
    Null est applicable sur tout type de colonnes (caractère, numérique, date...) à l'exception de celles ayant une contrainte "not null", par exemple les PK.
    Null est à prendre en compte dans les tables de décision avec les opérateurs AND, OR et NOT.
    Comme null est une absence de valeur, on ne peut pas écrire IF MA_COLONNE = null, car null n'est égal à rien, pas même à null ! On écrira donc IF MA_COLONNE is null.

    Vide n'a de sens que pour les types chaînes de caractères.
    IF MA_COLONNE = '' est une expression valide puisque vide est une valeur.

    Attention toutefois : Oracle confond allègrement "null" et vide, au mépris des normes SQL et de toute logique !

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 102
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 102
    Points : 8 212
    Points
    8 212
    Billets dans le blog
    17
    Par défaut
    Le null PHP n'a pas la même signification qu'en SQL et suit une logique classique.

    En PHP (null === null) => true

    Et pour compliquer un peu plus les choses le NULL SQL sera traité différemment selon les options PDO/PHP suivantes :

    PDO::ATTR_ORACLE_NULLS
    PDO::NULL_NATURAL
    PDO::NULL_EMPTY_STRING
    PDO::NULL_TO_STRING

    Voir la doc => https://www.php.net/manual/en/pdo.setattribute.php
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 912
    Points
    38 912
    Billets dans le blog
    9
    Par défaut
    Oui il faut bien distinguer le NULL SQL et sa gestion dans les différents langages, et aussi savoir que Oracle fait exception, puisqu'il confond null et chaîne vide

    Concernant la différence entre NULL et VIDE, la question étant récurrente, j'ai créé un billet de blog sur ce sujet.

    Voir ICI

  6. #6
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    empty() de PHP est un faux-ami. Il teste d'abord si une variable n'est pas définie ce qui revient à la comparer (strictement) à null en PHP. Dans un deuxième temps seulement, si la comparaison précédente a renvoyé false, empty() testera si la valeur est équivalente à false au sens de PHP et de manière faiblement typée. Par exemple la chaîne "0" sera considérée comme false (oui ça parait fou), de même que la chaîne vide, le booléen false, l'entier 0.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  7. #7
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 102
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 102
    Points : 8 212
    Points
    8 212
    Billets dans le blog
    17
    Par défaut
    Perso je n'utilise jamais empty() pour les raisons que tu énonces
    Exception => Vérifier si un tableau est vide (facilite la relecture)
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

Discussions similaires

  1. Insert dans une vue avec une valeur par défaut
    Par adiGuba dans le forum Requêtes
    Réponses: 1
    Dernier message: 23/07/2010, 15h12
  2. [AC-2000] Verifier un champs avec une valeur par défaut
    Par falco- dans le forum IHM
    Réponses: 1
    Dernier message: 09/10/2009, 13h25
  3. Ajout d'une colonne avec une valeur par defaut
    Par Rumeurs dans le forum PL/SQL
    Réponses: 3
    Dernier message: 13/07/2009, 18h06
  4. [XStream] Désérialiser un objet avec une valeur par défaut
    Par djodjo dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 21/04/2009, 13h47
  5. Réponses: 3
    Dernier message: 05/06/2007, 10h46

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