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

Requêtes MySQL Discussion :

Ne pas remplacer les 0 par des NULL


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 178
    Points : 56
    Points
    56
    Par défaut Ne pas remplacer les 0 par des NULL
    Bonjour,

    Je viens de créer une table pour la gestion des scores d'un match de foot. Avec comme champ : matchid - score 1 - score 2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE IF NOT EXISTS `matchs` (
     
      `matchid` int(5) NOT NULL,
      `score1` int(2) DEFAULT NULL,
      `score2` int(2) DEFAULT NULL,
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
    J'ai placé l'attribut NULL par défaut pour score1 et score2. Ensuite pour entrer les scores j'utilise la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    INSERT INTO matchs (score1, score2) 
    VALUES ($score1,$score2) WHERE matchid='$matchid'
    Mes données s'insèrent correctement. Sauf que si j'entre un score de 0-0. Dans ma table j'ai score1 = NULL , score2 = NULL ce qui est très embêtant pour moi.

    Ma question est donc de savoir comment puis-je procéder pour que si je ne saisisse rien dans le champ, il me mette NULL dans ma table mysql mais si je met 0-0 qu'il ne me mette pas NULL mais bien 0.

    Merci pour toutes réponses

  2. #2
    Membre confirmé Avatar de saad.hessane
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 315
    Points : 496
    Points
    496
    Par défaut
    Ben normalement si le champ est un int et que tu y insère 0 ca va insérer 0 non pas NULL.

  3. #3
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 178
    Points : 56
    Points
    56
    Par défaut
    Chez moi c'est un INT et j'ai toujours NULL même lorsque je met 0

  4. #4
    Membre confirmé Avatar de saad.hessane
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 315
    Points : 496
    Points
    496
    Par défaut
    Poste ton code PHP pour voir.

  5. #5
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 178
    Points : 56
    Points
    56
    Par défaut
    Mon controller

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    $matchid = $_POST['matchid'];
    $score1 = $_POST['score1'];
    $score2 = $_POST['score2'];
     
    $insert = $model->insertScore($matchid,$score1,$score2);
    Mon model


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    publique function insertScore($matchid,$score1,$score2){
     
    ...
     
    $insertSQL = $db->prepare("
    INSERT INTO matchs(matchid,score1,score2) 
    VALUES('$matchId',$score1,$score2)
    ");
    ...
     
    }
    si dans mon VALUES je met score1 et score2 entre ''. Automatiquement chaque fois que mes variable sont vides, il les remplace dans ma table par 0.

    Par contre si j'enlève les '' de score1 et score2, il me place bien NULL lorsque mes variables sont vides mais dès que je saisie 0 dans un champ, ben il passe aussi à NULL au lieu de 0.

    Moi je souhaiterais mettre NULL dans score1 et score2 si je ne saisie pas de score. Et mettre 0 à la place de NULL lorsque je saisie un score de 0.

    Merci pour l'aide

  6. #6
    Membre confirmé Avatar de saad.hessane
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 315
    Points : 496
    Points
    496
    Par défaut
    Je n'ai rien détecté dans ton code.
    Regarde, j'ai créé une table matches avec les même attributs que toi. Je met mon matchid en auto increment, ça ne doit pas être la source de ton problème. Voilà le SQL de création :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE `matchs` (
      `matchid` int(11) NOT NULL AUTO_INCREMENT,
      `score1` int(11) DEFAULT NULL,
      `score2` int(11) DEFAULT NULL,
      PRIMARY KEY (`matchid`)
    );
    Puis j'éxecute les requêtes suivantes :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO `matchs` (`matchid`, `score1`, `score2`) VALUES (NULL, 0, 0);
    INSERT INTO `matchs` (`matchid`, `score1`, `score2`) VALUES (NULL, NULL, NULL);

    J'ai alors le résultat suivant :

    Donc en gros ce que je t'ai dis.
    Images attachées Images attachées  

  7. #7
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 178
    Points : 56
    Points
    56
    Par défaut
    Oui parce que tu exécute directement dans mysql. Lorsque j'exécute moi aussi directement phpmyadmin. Ca marche. Mais dès que je passe par PHP, ça marche plus !

  8. #8
    Membre confirmé Avatar de saad.hessane
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 315
    Points : 496
    Points
    496
    Par défaut
    Ca doit être un problème de type dans PHP.
    Il faut peut être faire appel à la fonction intval.
    Essaie comme ça :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $score1 = intval($_POST['score1']);
    $score2 = intval($_POST['score2']);

  9. #9
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 178
    Points : 56
    Points
    56
    Par défaut
    Ca n'a rien changé.

    Apparemment j'ai lu quelque part cette explication sans que la personne ne donne de solution. En gros il dit que lorsque

    Si ma variable score2 est vide et que on fait un insert. Si dans ma values j'ai VALUES ('$score1','$score2') Mysql interprete ça par VALUES ('valeurscore1', 'NULL') et comme c'est un INT donc NULL est remplacé par 0 car pour lui c'est une chaine de caractère string.

    Par contre si on fait ceci VALUES ('$score1', $score2). Si score 2 est NULL mysql interprète ça par VALUES ('valeurscore1', NULL) et donc il place bien NULL dans le champ.

    Le souci maintenant est que si $score2 = 0. MYSQL interprète ça comme ça VALUES('valeurscore1', 0) et comme il connait pas 0 il met NULL

    La misère quoi !

  10. #10
    Membre confirmé Avatar de saad.hessane
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 315
    Points : 496
    Points
    496
    Par défaut
    Ce que tu dis n'a pas de sens. Le 0 est un INT, donc si tu lui dis d'insérer un 0 il va insérer 0.
    Maintenant si le champ est configuré pour accepter la valeur NULL, alors il insère NULL, sinon il insère la valeur par défault.
    La seul explication que je trouve est que les valeur envoyer par POST ne sont pas converti en int, et qu'il les considère toujours string. As-tu lu mon dernier post?

  11. #11
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 178
    Points : 56
    Points
    56
    Par défaut
    Ce que j'ai dit plus haut est une explication que j'ai trouvé sur un forum. Ensuite oui j'ai lu ton post et je suis en train de faire des essais. Merci pour ton aide en tous cas !

  12. #12
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 178
    Points : 56
    Points
    56
    Par défaut
    A y est j'ai trouvé. En fait en amont dans mon code je faisais un if(!empty($score)){....

    Hors, empty(0) renvoie toujours NULL. Donc c'est pour quoi dans ma table lorsque je mettais 0-0 il remplaçait par NULL.

    Merci quand même à Ilys05

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

Discussions similaires

  1. [CSV] Remplacer les points par des virgules
    Par johnkro dans le forum Langage
    Réponses: 4
    Dernier message: 27/11/2008, 19h25
  2. Comment remplacer les tabulations par des espaces ?
    Par richarno dans le forum Langage
    Réponses: 7
    Dernier message: 25/10/2007, 13h05
  3. remplacer les boutons par des images
    Par sotfage dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 18/06/2007, 17h41
  4. Label d'axe graphique: remplacer les nombres par des mots
    Par Chrysomallus dans le forum MATLAB
    Réponses: 3
    Dernier message: 19/04/2007, 15h23
  5. [vb6] Remplacer les Frames par des PictureBox
    Par Christophe P. dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 10/07/2006, 16h26

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