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 :

exporter un tableau php vers MySQL en prenant en compte les NULL [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2012
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 52
    Points : 31
    Points
    31
    Par défaut exporter un tableau php vers MySQL en prenant en compte les NULL
    Bonjour à tous!

    Je génère actuellement un tableau php à 5 éléments dans lequel il peut y avoir des éléments NULL (mais pas le premier).

    Ma table SQL est de la forme suivante:
    1 ID INT(10) NOT NULL
    2 DATA1 INT(2) DEFAULT NULL
    3 DATA2 VARCHAR(10) DEFAULT NULL
    4 DATA3 INT(2) DEFAULT NULL
    5 DATA4 VARCHAR(10) DEFAULT NULL

    Comment faire pour exporter ce tableau sous SQL en prenant en compte les éléments vides de mon tableau??
    En fait, j'utilise la ligne suivante dans mon code PHP:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO ma_table(ID, DATA1, DATA2, DATA3, DATA4) VALUES ('$mon_tableau[0]','$mon_tableau[1]','$mon_tableau[2]','$mon_tableau[3]','$mon_tableau[4]');
    Le problème est que pour le tableau suivant: 155 | 1 | TOTO |NULL|NULL
    (le 4eme et 5eme element est vide), j'obtiens ceci dans ma base:
    155 | 1 | TOTO |0|

    Pas de NULL...

  2. #2
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2012
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 52
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par redoran Voir le message
    Je le sais bien et c'est pour cela que je dois trouver un moyen d'envoyer NULL et pas une string vide.
    A priori, je pense que je vais devoir tester la valeur de mes éléments de tableau avant de construire ma requête...
    A moins qu'il n'y ait un moyen moins lourd....

  4. #4
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    pourquoi tu vire pas le not null comme contrainte de ta colonne car si tu dois entrer null alors tu as un défaut de modélisation...


  5. #5
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonsoir,

    voici une piste pour le faire en PHP 5.3+ (avec un peu de sécurité) :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <?php
     
    $fields = array();
    $data   = array();
     
    /**
     * @param string field Nom du champ de la table
     * @param mixed $value
     * @param bool $is_int entier attendu, si faux => string
     */
    $insert =
       function($field, $value, $is_int = false) use (&$fields, &$data)
       {
          $fields[] = $field;
          if (strlen($value) === 0) {
             $data[] = 'NULL';
          }
          else
          if ($is_int) {
             $data[] = (ctype_digit("$value")) ? $value : 'NULL';
          }
          else {
             $data[] = "'".mysql_real_escape_string($value)."'";
          }
       };
     
    $insert('ID',    $mon_tableau[0], true);
    $insert('DATA1', $mon_tableau[1], true);
    $insert('DATA2', $mon_tableau[2]);
    $insert('DATA3', $mon_tableau[3], true);
    $insert('DATA4', $mon_tableau[4]);
     
    $sql = 'INSERT INTO ma_table('.implode(', ', $fields).') VALUES ('.implode(', ', $data).')';
     
    ?>
    Enfin, c'est pas la panacée mais ça dépanne

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2012
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 52
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    Bonsoir,

    voici une piste pour le faire en PHP 5.3+ (avec un peu de sécurité) :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <?php
     
    $fields = array();
    $data   = array();
     
    /**
     * @param string field Nom du champ de la table
     * @param mixed $value
     * @param bool $is_int entier attendu, si faux => string
     */
    $insert =
       function($field, $value, $is_int = false) use (&$fields, &$data)
       {
          $fields[] = $field;
          if (strlen($value) === 0) {
             $data[] = 'NULL';
          }
          else
          if ($is_int) {
             $data[] = (ctype_digit("$value")) ? $value : 'NULL';
          }
          else {
             $data[] = "'".mysql_real_escape_string($value)."'";
          }
       };
     
    $insert('ID',    $mon_tableau[0], true);
    $insert('DATA1', $mon_tableau[1], true);
    $insert('DATA2', $mon_tableau[2]);
    $insert('DATA3', $mon_tableau[3], true);
    $insert('DATA4', $mon_tableau[4]);
     
    $sql = 'INSERT INTO ma_table('.implode(', ', $fields).') VALUES ('.implode(', ', $data).')';
     
    ?>
    Enfin, c'est pas la panacée mais ça dépanne
    Merci!
    Je vais prendre le temps de bien comprendre le code parce que ca fait appelle à des notions que je ne maitrise pas encore

    Je marque comme résolu et reviendrai si nécessaire...

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

Discussions similaires

  1. tableau excel vers mysql
    Par phpaide dans le forum Outils
    Réponses: 9
    Dernier message: 13/12/2013, 09h55
  2. [Excel] Exporter un tableau PHP vers CSV ou XLS
    Par mariafan dans le forum Bibliothèques et frameworks
    Réponses: 20
    Dernier message: 28/10/2011, 11h53
  3. Aide sur requete PHP vers MySQL
    Par pounie dans le forum Requêtes
    Réponses: 4
    Dernier message: 19/02/2006, 15h12
  4. [Excel] Exportation de donnée excel vers MySQL
    Par yoda7666 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 17/11/2005, 16h18

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