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 :

Valeurs vide deviennent des 0


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 401
    Points : 120
    Points
    120
    Par défaut Valeurs vide deviennent des 0
    Bonjour à tous,

    je travail avec des requêtes préparées. Sur mes valeurs à nombre, lorsque je bind la valeur qui est vide, elle se transforme en 0 sur ma base MySQL.

    J'ai essayé :

    $this->dbh->setAttribute(PDO::ATTR_ORACLE_NULLS,PDO::NULL_EMPTY_STRING);

    mais ça ne change rien

    Merci de votre aide
    www.ou-dejeuner.com A chacun son déjeuner ! |Blackprism.org

  2. #2
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Bonjour,

    quelles sont les caractéristiques du champ en base ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 401
    Points : 120
    Points
    120
    Par défaut
    C'est un float(3,1)
    www.ou-dejeuner.com A chacun son déjeuner ! |Blackprism.org

  4. #4
    Membre éclairé
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Points : 673
    Points
    673
    Par défaut
    Bonjour,

    t'aurais pas un default 0 sur ce champs ?
    Le savoir est utile que s'il est partagé par tous.
    /(bb|[^b]{2})/
    !sleep() ? array((string))

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 401
    Points : 120
    Points
    120
    Par défaut
    Non j'ai bien un NULL
    www.ou-dejeuner.com A chacun son déjeuner ! |Blackprism.org

  6. #6
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    montre nous ton code php stp

  7. #7
    Membre éclairé
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Points : 673
    Points
    673
    Par défaut
    et si au lieu de lui envoyer du vide, tu lui envoyais NULL ?
    Le savoir est utile que s'il est partagé par tous.
    /(bb|[^b]{2})/
    !sleep() ? array((string))

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 401
    Points : 120
    Points
    120
    Par défaut
    bien sûr, je vous mets des extraits des parties importantes.

    Pour information j'ai écris une class pour faciliter certaines opérations, d'où les $this

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $this->dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    $this->dbh->setAttribute(PDO::ATTR_ORACLE_NULLS,PDO::NULL_EMPTY_STRING);
     
    $rst_prix_formule         = $_POST['rst_prix_formule']; (ici $rst_prix_formule = (string) )
     
    $sql = 'UPDATE MA_TABLE SET rst_prix_formule         = :rst_prix_formule';
     
    $this->prepare = $this->dbh->prepare ( $sql );
     
    $sqlClass->bindParam('rst_prix_formule'         , $rst_prix_formule);
     
    $this->prepare->execute();
    www.ou-dejeuner.com A chacun son déjeuner ! |Blackprism.org

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ce n'est pas un problème PDO, tu obtiendras la meme chose si tu fais le test dans phpmyadmin.
    Ton float ne peut pas valoir une chaine vide.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 401
    Points : 120
    Points
    120
    Par défaut
    En fait je souhaite que ma valeur vide devienne null du côté MySQL et non 0,0
    www.ou-dejeuner.com A chacun son déjeuner ! |Blackprism.org

  11. #11
    Membre éclairé
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Points : 673
    Points
    673
    Par défaut
    t'as essayé en insérant NULL ?
    Le savoir est utile que s'il est partagé par tous.
    /(bb|[^b]{2})/
    !sleep() ? array((string))

  12. #12
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Es tu sur que ce n'est pas un $this->bindParam() dans ta classe qu'il faut utiliser ?

    Sinon, tu peux toujours tester de rajouter les 2 points...

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sqlClass->bindParam(':rst_prix_formule', $rst_prix_formule);

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 401
    Points : 120
    Points
    120
    Par défaut
    Oui c'est ce que je fais sur certains scripts mais je trouve ça bricolo :

    $ma_valeur = ($_POST['ma_valeur']=='' ? null : $_POST['ma_valeur']);
    www.ou-dejeuner.com A chacun son déjeuner ! |Blackprism.org

  14. #14
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Ce n'est pas un problème PDO, tu obtiendras la meme chose si tu fais le test dans phpmyadmin.
    Ton float ne peut pas valoir une chaine vide.
    Exact d'ailleurs sous PHPMyAdmin, on ne peut pas créer de colonne float en défault NULL

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 401
    Points : 120
    Points
    120
    Par défaut
    je viens de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $rst_prix_formule         = ( $_POST['rst_prix_formule']=='' ? null : $_POST['rst_prix_formule']);
    j'ai bien NULL dans ma base, mais j'ai 15 valeurs à insérer et je trouve ça crade...

    Il doit bien y avoir un moyen de convertir les valeurs vides en NULL et non en 0 ?
    www.ou-dejeuner.com A chacun son déjeuner ! |Blackprism.org

  16. #16
    Membre éclairé
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Points : 673
    Points
    673
    Par défaut
    petit test mais peut être me trompe je :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
    CREATE TABLE IF NOT EXISTS `testTable` (
      `testFloat` float(3,1) default NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
     
    --
    -- Contenu de la table `testTable`
    --
     
    INSERT INTO `testTable` (`testFloat`) VALUES(0);
    INSERT INTO `testTable` (`testFloat`) VALUES('');
    INSERT INTO `testTable` (`testFloat`) VALUES(NULL);
     
     
    SELECT * FROM testTable

    donne
    Le savoir est utile que s'il est partagé par tous.
    /(bb|[^b]{2})/
    !sleep() ? array((string))

  17. #17
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ma_valeur = ($_POST['ma_valeur']=='' ? null : $_POST['ma_valeur']);
    en effet ceci est crade et peut lancer des notices si POST est mal définit...
    ceci n'aura pas ce problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ma_valeur = isset($_POST['ma_valeur']) ? $_POST['ma_valeur']: null;
    ceci pourrait faire quelque chose de mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ma_valeur = empty($_POST['ma_valeur']) ? null : $_POST['ma_valeur'];
    cependant php mélange les zéro et les vide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ma_valeur = (empty($_POST['ma_valeur']) and !is_numeric($_POST['ma_valeur']) )? null : $_POST['ma_valeur'];
    c'est là qu'on se dit que les formulaires à la main, c'est performant certe mais c'est lourdingue.
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  18. #18
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je trouverais le test plus logique comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ma_valeur = (isset($_POST['ma_valeur']) && $_POST['ma_valeur'] !== '' ) ? NULL : $_POST['ma_valeur'];
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  19. #19
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Plutôt comme ceci alors (coquille) :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $ma_valeur = (isset($_POST['ma_valeur']) && $_POST['ma_valeur'] !== '' ) ? $_POST['ma_valeur'] : NULL;

  20. #20
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Mais heu !
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/10/2010, 14h38
  2. lire des valeurs vides dans un fichier txt
    Par bakaratoun dans le forum MATLAB
    Réponses: 5
    Dernier message: 14/12/2009, 16h15
  3. Ignorer des valeurs vides dans un graphe
    Par Dazdh dans le forum Excel
    Réponses: 3
    Dernier message: 18/08/2009, 15h02
  4. [2K8] Problème de doublon sur des valeurs vides
    Par patriceharel dans le forum SSAS
    Réponses: 4
    Dernier message: 09/07/2009, 15h16

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