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 :

Utilisation de la valeur SQL NULL [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    261
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 261
    Par défaut Utilisation de la valeur SQL NULL
    Soit une table MySql avec les champs nom et mot de passe prenant NULL par defaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      `nom` varchar(255) NOT NULL default '',
      `passe` varchar(255) default  NULL '',
    Un formulaire php alimente la table
    Soit nom = 'toto' et pas de mot de passe
    Le champ passe restant vide, je retrouve NULL dans la table. Normal

    Un script d'accès à mon site permet aux utilisateurs de saisir nom et mot de passe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $query_RsProf = sprintf("SELECT * FROM prof WHERE prof.nom=%s AND passe=%s", $nom,$passe);
    etc...
    Mon script fonctionne très bien sauf lorsque le mot de passe n'est pas renseigné

    Mon Select n'est plus correct pour comparer un champ (vide?) et la valeur NULL correspondate dans la table.

    Que dois-je modifier ?

  2. #2
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Par défaut
    Salut Pierre50,
    peux-tu preciser le texte de ta requete une fois les var renseignée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    query='SELECT....;'
    echo query;
    par exemple.

    sinon avec des quotes ce serait mieux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sprintf('Select... and passe="%s";')
    a moins que sprintf te les rajoute, si tu ne le fais pas et que $passe est null alors ta requete est incorrecte puisque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select ... passe=;
    you know what i mean?
    voila, bon dev

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    261
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 261
    Par défaut
    J'ai bien en resultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT * FROM prof WHERE prof.nom='toto' AND passe=''
    '' est different de NULL dans la table

  4. #4
    Membre chevronné Avatar de gofono_bass
    Inscrit en
    Décembre 2005
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2005
    Messages : 383
    Par défaut
    alors peut-etre comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $passe=($passe=='')?'NULL':$passe;
     
    $query_RsProf = sprintf("SELECT * FROM prof WHERE prof.nom=%s AND passe=%s", $nom,$passe);
    :

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2003
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 285
    Par défaut
    NULL n'est pas une valeur...

    utilise la fonction is_null()

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2003
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 285
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $pass = (is_null($passe)) ? ' IS NULL' : " = '".$passe."'";
     
    $query = "SELECT * FROM prof WHERE prof.nom='".$nom."' AND passe".$pass

  7. #7
    Membre chevronné Avatar de gofono_bass
    Inscrit en
    Décembre 2005
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2005
    Messages : 383
    Par défaut
    je sais que NULL n'est pas une valeur, je proposais ça pour peut-etre (je sais bien que ça peut etre faux...) pouvoir mettre la condition =NULL dans sa requete.

  8. #8
    Membre expérimenté
    Inscrit en
    Septembre 2005
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 185
    Par défaut
    slt , modifie la structure de ta table en enlevant le essaye encore et dis moi ce que t'as.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    261
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 261
    Par défaut
    Le code ci-dessous ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $pass = (is_null($passe)) ? ' IS NULL' : " = '".$passe."'"; 
     
    $query = "SELECT * FROM prof WHERE prof.nom='".$nom."' AND passe".$pass
    Il donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM prof WHERE prof.nom='titi' AND passe='0'
    ( La suppression de default ds la table ne change rien )

    Mais que faut-il obtenir en select c'est à dire
    Quelle est la commande SELECT qui liste tout les "passe" qui sont NULL dans ma table ?

  10. #10
    Membre chevronné Avatar de gofono_bass
    Inscrit en
    Décembre 2005
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2005
    Messages : 383
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT pass FROM prof WHERE pass IS NULL
    : non???

    EDIT: et ma proposition tu l'as essayée?

  11. #11
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    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 322
    Billets dans le blog
    17
    Par défaut
    Il faut utiliser IS NULL dans ta requête MySQL au cas où $_POST['password'] est une chaîne vide (et non un NULL PHP (ce qu'il ne sera jamais vu qu'il vient d'un <form>))

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2003
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 285
    Par défaut
    Citation Envoyé par Sion_Sempai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $pass = (!isset($passe) || is_null($passe) || trim($passe) == '') ? ' IS NULL' : " = '".$passe."'";
     
    $query = "SELECT * FROM prof WHERE prof.nom='".$nom."' AND passe".$pass
    j'ai seulement vérifié le null, faut verifier le reste aussi

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    261
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 261
    Par défaut
    Donc tout simplement, je fais un select particulier si le passe est non renseigné

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (passe='')  {$query ="SELECT * FROM prof WHERE prof.nom='".$nom."' AND passe IS NULL";}
    Et cela fonctionne !

    Merci à tous

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

Discussions similaires

  1. Requête SQL qui ne renvoie rien quand la valeur est nulle
    Par vocal94130 dans le forum Requêtes
    Réponses: 4
    Dernier message: 01/09/2010, 14h11
  2. [SQL] affecter la valeur SQL NULL si la variable est vide
    Par marie4449 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 28/03/2007, 18h44
  3. Réponses: 2
    Dernier message: 14/02/2007, 16h22
  4. [SQL] Requête avec "valeur si null"
    Par metalcoyote dans le forum Oracle
    Réponses: 3
    Dernier message: 19/04/2006, 10h22
  5. [SQL-SERVER] Utilisation de DEFAULT (valeur par défaut)
    Par Sytchev3 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 27/03/2006, 18h53

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