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 :

Création fichier csv via bdd Erreur : Nombre de colonnes invalides dans les données CSV


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    noobies
    Inscrit en
    Décembre 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : noobies

    Informations forums :
    Inscription : Décembre 2014
    Messages : 82
    Points : 46
    Points
    46
    Par défaut Création fichier csv via bdd Erreur : Nombre de colonnes invalides dans les données CSV
    Bonjour,

    je suis sur une fonction qui liste ma table pour faire un fichier .csv

    La création se fais bien, mais au moment de l'import sql avec phpmyadmin, j'ai une erreur "Nombre de colonnes invalide dans les données CSV à la ligne 1".

    Voici mon fichier csv sur excel :

    Nom : cr.png
Affichages : 109
Taille : 8,2 Ko

    mon code :

    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
        $r = $bd->query('SELECT * FROM csv1 ');
     
        $csv = [];
        $csv[] = [`COL 1`, `COL 2`, `COL 3`, `COL 4`, `COL 5`, `COL 6`, `COL 7`, `COL 8`, `COL 9`, `COL 10`, `COL 11`, `COL 12`, `COL 13`, `COL 14`, `COL 15`, `COL 16`, `COL 17`, `COL 18`, `COL 19`, `COL 20`, `COL 21`, `COL 22`, `COL 23`, `COL 24`, `COL 25`, `COL 26`, `COL 27`, `COL 28`, `COL 29`, `COL 30`, `COL 31`, `COL 32`, `COL 33`, `COL 34`, `COL 35`, `COL 36`, `COL 37`, `COL 38`];
        $csv[] = ['', '', '','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',];
     
        while($rs = $r->fetch(PDO::FETCH_ASSOC)){
            $csv[] = [$rs['COL 1'],$rs['COL 2'],$rs['COL 3'],$rs['COL 4'],$rs['COL 5'],$rs['COL 6'],$rs['COL 7'],$rs['COL 8'],$rs['COL 9'],$rs['COL 10'],$rs['COL 11'],$rs['COL 12'],$rs['COL 13'],$rs['COL 14'],$rs['COL 15'],$rs['COL 16'],
                      $rs['COL 17'],$rs['COL 18'],$rs['COL 19'],$rs['COL 20'],$rs['COL 21'],$rs['COL 22'],$rs['COL 23'],$rs['COL 24'],$rs['COL 25'],$rs['COL 26'],$rs['COL 27'],$rs['COL 28'],$rs['COL 29'],$rs['COL 30'],$rs['COL 31'],$rs['COL 32'],
                      $rs['COL 33'],$rs['COL 34'],$rs['COL 35'],$rs['COL 36'],$rs['COL 37'],$rs['COL 38']];
        }
     
        $fichier_csv = fopen("csv.csv", "w+");
     
        fprintf($fichier_csv, chr(0xEF).chr(0xBB).chr(0xBF));
     
        foreach($csv as $ligne){
            $ligne = array_map("utf8_decode", $ligne);
            fputcsv($fichier_csv, $ligne, ";");
        }
     
        fclose($fichier_csv);
    J'ai bien le bon nombre de colonnes.

    En fait, si j'importe sur une table vierge, ça me place tout dans une colonne.

    Nom : col.png
Affichages : 88
Taille : 15,2 Ko


    Merci

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 011
    Points : 7 996
    Points
    7 996
    Billets dans le blog
    17
    Par défaut
    Tu as vraiment des colonnes de "COL 1" à "COL 38" ? C'est signe de probable mauvaise modélisation de base de données.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $csv[] = [`COL 1`, `COL 2`, `COL 3`, `COL 4`, `COL 5`, `COL 6`, `COL 7`, `COL 8`, `COL 9`, `COL 10`, `COL 11`, `COL 12`, `COL 13`, `COL 14`, `COL 15`, `COL 16`, `COL 17`, `COL 18`, `COL 19`, `COL 20`, `COL 21`, `COL 22`, `COL 23`, `COL 24`, `COL 25`, `COL 26`, `COL 27`, `COL 28`, `COL 29`, `COL 30`, `COL 31`, `COL 32`, `COL 33`, `COL 34`, `COL 35`, `COL 36`, `COL 37`, `COL 38`];
    En PHP on délimite les chaînes avec ' ou ", jamais ` (qui est un opérateur d'exécution de commande externe).
    Il faut que tu corriges cela.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    fprintf($fichier_csv, chr(0xEF).chr(0xBB).chr(0xBF));
     
    foreach($csv as $ligne){
        $ligne = array_map("utf8_decode", $ligne);
        fputcsv($fichier_csv, $ligne, ";");
    }
    Je ne comprends pas bien, tu places le BOM UTF-8 en début de fichier, puis tu convertis ta chaîne UTF-8 en ISO-8859-1

    La création se fais bien, mais au moment de l'import sql avec phpmyadmin j'ai une erreur "Nombre de colonnes invalide dans les données CSV à la ligne 1".
    En fait si j'importe sur une table vierge ca me place tout dans une colonne..
    Lors de l'import, tu précises bien que le séparateur est ; ?
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Membre du Club
    Homme Profil pro
    noobies
    Inscrit en
    Décembre 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : noobies

    Informations forums :
    Inscription : Décembre 2014
    Messages : 82
    Points : 46
    Points
    46
    Par défaut
    Bonjour Seb,

    j'ai modifié le code comme ceci :

    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
    $r = $bd->query('SELECT * FROM csv1 ');
     
        $csv = [];
        $csv[] = ['MODEL','MAKE','TOOL SN','MODE','YEAR','DEALER CODE','INTERNAL RESISTANCE','BATTERY TEMPERATURE (°C)','DIAG ITERATION','JOB ID','JPR','PRE-CHARGE','OCV','BATTERY SN','VIN','BATTERY CCA','CLAMPS LOCATION','BATTERY ','BATTERY TYPE','CHARGE DURATION PROPOSAL CUSTOMER','ZIP CODE','DATE','DEFAULT TYPE','SOH','GLOBAL RESULT','MODE ID','TIME','TEST LOCATION','SOFTWARE VERSION','BATTERY FUNCTION','DATABASE VERSION','BKCODE','SCANNED BKCODE','GLOBAL RESULT STATUS','ID CLAMPS LOCATION','GENUINE ID;GLOBAL RESULT ID','TEST LOCATION ID','BATTERY FUNCTION ID'];
     
        while($rs = $r->fetch(PDO::FETCH_ASSOC)){
            $csv[] = [$rs['COL 1'],$rs['COL 2'],$rs['COL 3'],$rs['COL 4'],$rs['COL 5'],$rs['COL 6'],$rs['COL 7'],$rs['COL 8'],$rs['COL 9'],$rs['COL 10'],$rs['COL 11'],$rs['COL 12'],$rs['COL 13'],$rs['COL 14'],$rs['COL 15'],$rs['COL 16'],
                      $rs['COL 17'],$rs['COL 18'],$rs['COL 19'],$rs['COL 20'],$rs['COL 21'],$rs['COL 22'],$rs['COL 23'],$rs['COL 24'],$rs['COL 25'],$rs['COL 26'],$rs['COL 27'],$rs['COL 28'],$rs['COL 29'],$rs['COL 30'],$rs['COL 31'],$rs['COL 32'],
                      $rs['COL 33'],$rs['COL 34'],$rs['COL 35'],$rs['COL 36'],$rs['COL 37'],$rs['COL 38']];
        }
     
        $fichier_csv = fopen("csv.csv", "w+");
     
        fprintf($fichier_csv, chr(0xEF).chr(0xBB).chr(0xBF));
     
        foreach($csv as $ligne){
            $ligne = array_map("utf8_decode", $ligne);
            fputcsv($fichier_csv, $ligne, ";");
        }
     
        fclose($fichier_csv);
     
     
      exit;
    voila le fichier csv qui m'a servi a faire ma table (38 colonnes mais que 2 qui m'intéresse sur la table du coup j'ai placer les autre avec une "tel que defini")

    Nom : csv or.png
Affichages : 56
Taille : 45,8 Ko

    et voici ce que me ressort le csv uploadé, je vois que j'ai des "" en plus que des ; separateurs .

    Nom : new csv.png
Affichages : 54
Taille : 23,2 Ko

    et toujours ce message d'erreur lors de l'import phpmyadmin :

    Nom : err.png
Affichages : 54
Taille : 7,7 Ko


    en faite je ne sais plus comment j'ai crée mes colonnes, je sais que j'avais importé le fichier csv et que les 38 colonnes c'etais placées.
    maintenant quand j'importe tout ce met dans une colonne...

    merci

  4. #4
    Membre du Club
    Homme Profil pro
    noobies
    Inscrit en
    Décembre 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : noobies

    Informations forums :
    Inscription : Décembre 2014
    Messages : 82
    Points : 46
    Points
    46
    Par défaut
    Bonjour,

    j'arrive a importer mais les colonnes 14 et 24 ne s'affiche pas ce me double les colonnes 15 et 25

    Pièce jointe 650754

    le code :

    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
    $r = $bd->query('SELECT * FROM csv1 ');
     
        $csv = [];
        $csv[] = ['MODEL','MAKE','TOOL SN','MODE','YEAR','DEALER CODE','INTERNAL RESISTANCE','BATTERY TEMPERATURE (°C)','DIAG ITERATION','JOB ID','JPR','PRE-CHARGE','OCV','BATTERY SN','VIN','BATTERY CCA','CLAMPS LOCATION','BATTERY ','BATTERY TYPE','CHARGE DURATION PROPOSAL CUSTOMER','ZIP CODE','DATE','DEFAULT TYPE','SOH','GLOBAL RESULT','MODE ID','TIME','TEST LOCATION','SOFTWARE VERSION','BATTERY FUNCTION','DATABASE VERSION','BKCODE','SCANNED BKCODE','GLOBAL RESULT STATUS','ID CLAMPS LOCATION','GENUINE ID','GLOBAL RESULT ID','TEST LOCATION ID','BATTERY FUNCTION ID4'];
        while($rs = $r->fetch(PDO::FETCH_ASSOC)){
            $csv[] = [$rs['COL 1'],$rs['COL 2'],$rs['COL 3'],$rs['COL 4'],$rs['COL 5'],$rs['COL 6'],$rs['COL 7'],$rs['COL 8'],$rs['COL 9'],$rs['COL 10'],$rs['COL 11'],$rs['COL 12'],$rs['COL 13'],$rs['COL 14'],$rs['COL 15'],$rs['COL 16'],
                      $rs['COL 17'],$rs['COL 18'],$rs['COL 19'],$rs['COL 20'],$rs['COL 21'],$rs['COL 22'],$rs['COL 23'],$rs['COL 24'],$rs['COL 25'],$rs['COL 26'],$rs['COL 27'],$rs['COL 28'],$rs['COL 29'],$rs['COL 30'],$rs['COL 31'],$rs['COL 32'],
                      $rs['COL 33'],$rs['COL 34'],$rs['COL 35'],$rs['COL 36'],$rs['COL 37'],$rs['COL 38']];
        }
     
        $fichier_csv = fopen("csv.csv", "w+");
     
        fprintf($fichier_csv, chr(0xEF).chr(0xBB).chr(0xBF));
     
        foreach($csv as $ligne){
            $ligne = array_map("utf8_decode", $ligne);
            fputcsv($fichier_csv, $ligne, ";");
        }
     
        fclose($fichier_csv);
    le csv :

    Nom : csv act.png
Affichages : 26
Taille : 21,7 Ko

    je pense que mon csv ne prend pas la bonne forme, voici le csv origine

    Nom : csv or.png
Affichages : 25
Taille : 45,8 Ko

    merci

  5. #5
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 011
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 011
    Points : 7 996
    Points
    7 996
    Billets dans le blog
    17
    Par défaut
    Si tu veux comprendre ce qui se passe tu ne dois pas ouvrir un .csv avec Excel ou autre tableur qui va interpréter plus ou moins bien le format et l'anomalie et cacher les sources potentielles d'anomalies.

    Pour vérifier s'il est correctement formé, ouvre le CSV avec un éditeur de texte classique.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  6. #6
    Membre du Club
    Homme Profil pro
    noobies
    Inscrit en
    Décembre 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : noobies

    Informations forums :
    Inscription : Décembre 2014
    Messages : 82
    Points : 46
    Points
    46
    Par défaut
    Bonjour Seb,

    j'avais bien un problème de colonnes 39 et non 38 .. pour ca c'est résolu. merci

    maintenant je cherche a insérer une variable dans mon Fopen pour diriger le fichier vers un dossier spécifique

    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
     
      $csv2 = 'csv'.$id.'/rev/';
      $nomfichier = $_GET['fichier'];
      $nfrev = 'rev_'$nomfichier ;
      $chemin = $csv2.$nfrev ;
     
      $fichier_csv = fopen( .$chemin. , 'w+');
     
        fprintf($fichier_csv, chr(0xEF).chr(0xBB).chr(0xBF));
     
        foreach($csv as $ligne){
            $ligne = array_map("utf8_decode", $ligne);
            fputcsv($fichier_csv, $ligne, ";");
        }
     
        fclose($fichier_csv);
    je suis pas sur de l'insertion de la variable $chemin

    merci

  7. #7
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 011
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 011
    Points : 7 996
    Points
    7 996
    Billets dans le blog
    17
    Par défaut
    Je n'ai pas compris.

    S'il s'agit d'un autre problème ouvre une autre discussion.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/07/2021, 23h25
  2. Réponses: 5
    Dernier message: 29/03/2011, 16h16
  3. nombre de colonnes dynamiques dans une Datagrid
    Par khayri dans le forum Struts 1
    Réponses: 2
    Dernier message: 04/06/2007, 22h14
  4. [Etat]Nombre de colonnes variables dans un état
    Par milou161185 dans le forum IHM
    Réponses: 15
    Dernier message: 27/03/2007, 17h39
  5. bdd : erreur 3265 élément non trouvé dans cette collection
    Par morgan47 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 10/07/2006, 10h52

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