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 :

clé unique et champ vide


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    retraité
    Inscrit en
    Février 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2015
    Messages : 14
    Par défaut clé unique et champ vide
    bonjour,

    j'ai créé une table "adherents" avec l'un des champs "Email" que j'ai défini avec l'option "unique".
    Lorsque j'insère un nouvel enregistrement ayant la même valeur dans ce champ, j'obtiens bien le code retour "1062: Duplicate entry '' for key 'Email'".
    Le problème est que je souhaiterais pouvoir saisir la valeur vide et dès que je crée un nouvel enregistrement avec ce champ vide, j'obtiens la même erreur.
    Comment paramétrer ce champ qui me permette de le laisser vide ?

    Merci de votre aide

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 313
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 313
    Billets dans le blog
    17
    Par défaut
    Il faut que tu autorises la valeur NULL
    Ta table pourra contenir plusieurs e-mails NULL (et pas chaîne vide)

  3. #3
    Membre averti
    Homme Profil pro
    retraité
    Inscrit en
    Février 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2015
    Messages : 14
    Par défaut clé unique et champ vide
    Merci
    ça marche.
    Je n'avais pas fait la différence entre vide et NULL

    Une autre question : j'ai donc choisi valeur par défaut NULL, par contre que signifie la colonne "NULL" ?
    Merci encore

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 571
    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 571
    Billets dans le blog
    10
    Par défaut
    Bonjour

    "Null" n'est pas une valeur, mais un marqueur d'absence de valeur, alors que "vide" est une valeur, la valeur "vide".
    C'est la raison pour laquelle il faut tester l'égalité avec la valeur vide, mais vérifier qu'une colonne est nulle :

    On n'écrira pas WHERE MA_COLONNE = NULL mais WHERE MA_COLONNE IS NULL.
    Alors que WHERE MA_COLONNE = '' est correct

  5. #5
    Membre averti
    Homme Profil pro
    retraité
    Inscrit en
    Février 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2015
    Messages : 14
    Par défaut clé unique et champ vide
    Merci Seb et Escartefigue pour la précision
    En fait je n'ai pas testé correctement, ça ne marche pas !
    En utilisant directement phpmyadmin, en configurant NULL pour la valeur par défaut, et modifiant la valeur , si j'ai 2 enregistrements avec le champ Email mis à NULL, j'ai l'erreur dupplicate

  6. #6
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 313
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 313
    Billets dans le blog
    17
    Par défaut
    Sûrement parce que tes champs ne sont pas NULL mais (chaîne vide).

    As-tu vérifié ? Comment fais-tu l'insertion et la màj ?

  7. #7
    Membre averti
    Homme Profil pro
    retraité
    Inscrit en
    Février 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2015
    Messages : 14
    Par défaut clé unique et champ vide
    re-bonjour,

    j'ai ré-essayé et fait une capture (avec l'utilitaire phpmyadmin)
    - structure.jpg montre la définition du champ NULL
    - DefinitionIndex.jpg montre le champ Email défini UNIQUE
    - Exemple.jpg montre l'exemple de 2 enregistrements avec un email différent
    - exempleNULL.jpg montre l'erreur après avoir rempli le champ Email des 2 enregistrement avec la valeur NULL (pareil si le champ Email des 2 enregistrements est mis à blanc)

    Lorsque je fait le test avec mon application de gestion des adhérents, même problème avec le code erreur 1062

    Si vous avez une idée du problème, merci
    Sinon, je vais programmer la détection des Emails en double

    Merci encore
    Images attachées Images attachées     

  8. #8
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 313
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 313
    Billets dans le blog
    17
    Par défaut
    Ton UPDATE n'est pas bon, tu fais :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE adherents SET email = 'NULL' WHERE ...

    => Tu affectes la chaîne "NULL", pas la valeur NULL

    Il faudrait faire :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE adherents SET email = NULL WHERE ...

  9. #9
    Membre averti
    Homme Profil pro
    retraité
    Inscrit en
    Février 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2015
    Messages : 14
    Par défaut clé unique et champ vide
    cette fois c'est bon, effectivement j'ai confondu 'NULL' avec NULL
    J'ai fait la même erreur aussi bien dans ma programmation que dans phpmyadmin (dans ce dernier cas, je n'avais pas utilisé la coche null à côté du champ value, j'avais tapé NULL dans ce champ !))

    Merci

  10. #10
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 313
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 313
    Billets dans le blog
    17
    Par défaut
    Côté PHP il y a la fonction SQL NULLIF() qui est très utile pour simplifier la manipulation de NULL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sql = <<<SQL
        UPDATE adherents
        SET email = NULLIF({$pdo->quote($email)}, '')
        WHERE ...
        SQL;
    Si ta variable $email vaut '' (chaîne vide) NULLIF() retourne NULL, sinon retourne $email

    https://dev.mysql.com/doc/refman/8.0...unction_nullif

Discussions similaires

  1. Filtrer uniquement les champs non vides
    Par qmike dans le forum Requêtes
    Réponses: 2
    Dernier message: 12/10/2012, 14h40
  2. Pb de tri avec champs vide
    Par Invité dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/06/2004, 17h42
  3. Test sur un champs vide
    Par PrinceMaster77 dans le forum ASP
    Réponses: 2
    Dernier message: 27/04/2004, 12h54
  4. [conception] champs vides ou plusieurs tables ?
    Par in dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 17/02/2004, 08h41
  5. tri avec les champs vides en dernier
    Par r-zo dans le forum Requêtes
    Réponses: 11
    Dernier message: 03/09/2003, 13h40

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