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

Langage PHP Discussion :

Export CSV - Problème espace en trop


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 274
    Par défaut Export CSV - Problème espace en trop
    Bonjour à tous,

    Je viens vers vous car j'ai un soucis que je vous détails ci-dessous.

    L'entreprise pour laquelle je travail, va changer d'ERP/CRM pour sa gestion en générale.

    Pour ce faire je dois exporter en fichier CSV les informations clients afin de pouvoir les importer dans le nouvel ERP/CRM.
    J'ai donc mis en place une page d'exportation.

    Tout d'abord, pour faciliter l'export j'utilise une fonction personnelle qui va convertir un tableau en fichier CSV

    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
    <?php
    /**
     * @p (sgtring) : Chemin vers le dossier
     * @f (string) : Nom du fichier
     * @a (array) : Tableau PHP contenant les lignes à écrire dans leCSV
    **/
    function arrToCsv($p,$f,$a){
        // On ouvre le fichier en lecture / ecriture, Si le fichier n'existe pas on tente de le créer
        $fp = fopen($p.'/'.$f.'.csv', 'w+');
        // Parcours le tableau
        foreach($a as $b){
            // Ajoute au fichier la ligne en cours (elle-même un tableau incrémenté, sans clés définie)
            fputcsv($fp, $b, ";",' ');
        }
        // Ferme le fichier
        fclose($fp);
        // Un petit retour vite fait ( j'aime pas les fonction sans retour :p ) 
        return true;
    }
    ?>
    Mais voilà, chaque données que je vais enregistrée va se retrouvée avec des espaces supplémentaires.
    Exemple avec des données de base tel que le nom et prénom.
    Dans ma base de données le nom est séparé du prénom, mais pas dans le nouvel ERP
    Donc je doit formater ma donnée ce que je fait bien évidemment.

    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
    <?php
     
    $tmp = array();
    $req = "SELECT * FROM clients";
    $qry = $pdo->query($req);
    while($r = $qry->fetch(PDO::FETCH_ASSOC)){
        $nameFormated = $r['nom'].' '.$r['prenom']; // On concatène le nom et prénom pour le rendre compatible
        $tmp2 = array('name' => $nameFormated);
        $tmp[] = $tmp2;
    }
     
    // Juste pour les tests
    echo '<pre>';
    print_r($tmp);
    echo '</pre>';
     
    // Maintenant je converti en CSV
    $nameFile = 'export-'.time();  // Nom du nouveau fichier
    arrToCsv('mods/Exports/csv',$nameFile,$arr);  // Converti mon tableau en CSV
     
    echo '<a href="mods/Exports/csv/'.$nameFile.'.csv">mods/Exports/csv/'.$nameFile.'.csv</a>';
     
    ?>
    Mais voilà le print_r me retourne bien un tableau avec nom et prénom
    Array(
    [0] => array(
    [0] => 'Mon Nom et Prénom'
    ),
    [1] => array(
    [0] => 'Mon Nom 1 et Prénom 1'
    ),
    etc...
    )
    Pas de soucis l'affichage est correct, mais étrangement mon fichier CSV double chaque espace qu'il trouve et j'obtiens des données avec des double espace

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Affichage :
    Mon Nom et Prénom
    CSV :
    Mon  Nom  et  Prénom
    Même les noms et prénom composés qui sont bien encodés avec un espace dans la base de données MySQL, se retrouve avec un deuxième espace vide dès qu'un espace est rencontrés.
    Ce que je ne comprend pas, puisque rien dans le code ou la base de données n'est sensé doublé chaque espace qu'il croise.

    Ma table de ma BDD MySQL est en "innoDB" et utf8_genéral_ci
    Mon fichier PHP est au format windows et encodé en utf8

    Logiquement pas de conflit dû à l'encodage de caractère.

    Si quelqu'un à une piste je suis preneur :p

    D'avance merci de votre participation.
    Belle journée
    Spliffer

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 274
    Par défaut
    Problème résolu

    Pour information, j'ai modifier la commande fputcsv

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // Avant :
    fputcsv($fp, $b, ";",' ');
     
    // Après
    fputcsv($fp, $b, ";");
    ce qui à réglé le problème.

    Belle journée à tous
    Spliffer

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

Discussions similaires

  1. [AC-2007] Problème export csv limité à 255 caractères !
    Par podalamina dans le forum Access
    Réponses: 15
    Dernier message: 15/10/2012, 16h03
  2. exportation csv problème accent
    Par dlgdev dans le forum VB.NET
    Réponses: 6
    Dernier message: 04/02/2011, 05h49
  3. [2.5.2] Export CSV : Problème de visibilité
    Par jean.dat dans le forum BIRT
    Réponses: 6
    Dernier message: 25/06/2010, 15h56
  4. [SSRS 2K8] problème export csv
    Par phoenix75 dans le forum SSRS
    Réponses: 0
    Dernier message: 14/12/2009, 11h16
  5. Supprimer un espace (export csv)
    Par Lionel57 dans le forum Requêtes
    Réponses: 2
    Dernier message: 02/12/2007, 09h17

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