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 :

Générer un csv


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    A la découverte de la POO
    Inscrit en
    Mai 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : A la découverte de la POO

    Informations forums :
    Inscription : Mai 2009
    Messages : 93
    Par défaut Générer un csv
    Je m'attaque pour la 1ere fois au csv et je bute un poil...

    voici 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
    //Premiere ligne ; nom des champs :
      $csv_sortie = "Immatriculation,Marque,Modele";
      $csv_sortie .= "\r\n";  
    while($donnees=mysql_fetch_array($resultat))
      {
      ... du code divers
      // on s'occupe du csv
      $csv_sortie .= '"'.$donnees['champ1'] . '","' .$donnees['champ2'] . '","' .$donnees['champ3'].'"'; 
      $csv_sortie .= "\r\n";
      }
      $fp = fopen('file.csv', 'w');
      fputcsv($fp, split(',',$csv_sortie));
      fclose($fp); // On ferme le fichier
    dans mon fichier csv qui existe déja, cela va bien à la ligne mais... dans la même cellule! avec openoffice
    dans excel cela revient bien à la ligne mais les 3 champs sont dans la même colonne
    et enfin voila ce qui généré dans notepad++ :

    Immatriculation,Marque,"Modele
    ""12""","""Citroen""","""laguna""
    ""124 - AA -""","""Yamaha""","""hello""
    ""22 22 al""","""Alfa Romeo""","""daube""
    "



    ca me fait chi@#"*! ces " qui s'insèrent...
    il y a quelque chose qui m'échappe...

  2. #2
    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
    Par défaut
    Dans le format francais, le séparateur est le point virgule.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 127
    Par défaut Oh manu
    En somme tu ne veux pas de " pour délimiter les champs
    Dans ce cas il faut transformer les en Bon Dev

  4. #4
    Membre confirmé
    Homme Profil pro
    A la découverte de la POO
    Inscrit en
    Mai 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : A la découverte de la POO

    Informations forums :
    Inscription : Mai 2009
    Messages : 93
    Par défaut
    ah, ok pour le ; au lieu du ,

    sinon j'ai essayé avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $csv_sortie .= "'". $donnees['immat'] . "';'" .$donnees['nom_marque'] . "';'" .$donnees['modele']."'";
    résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    "Immatriculation;Marque;Modele
    '12';'Citroen';'laguna'
    '124 - AA -';'Yamaha';'hello'
    '22 22 al';'Alfa Romeo';'daube'
    '429 dwy 78';'Peugeot';'406'
    "
    qui parait niquel dans notepad++
    mais pas bien dans excel et calc

    et aussi ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $csv_sortie .=  $donnees['immat'] . ';' .$donnees['nom_marque'] . ';' .$donnees['modele'];
    résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    "Immatriculation;Marque;Modele
    12;Citroen;laguna
    124 - AA -;Yamaha;hello
    22 22 al;Alfa Romeo;daube
    429 dwy 78;Peugeot;406
    "
    et la le résultat est presque niquel : les retours à la ligne sont faits mais ...
    toutes ces infos s'affichent dans UNE cellule

  5. #5
    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
    Par défaut
    D'ou viennent les " en début et fin de chaine.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre confirmé
    Homme Profil pro
    A la découverte de la POO
    Inscrit en
    Mai 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : A la découverte de la POO

    Informations forums :
    Inscription : Mai 2009
    Messages : 93
    Par défaut
    Citation Envoyé par sabotage Voir le message
    D'ou viennent les " en début et fin de chaine.
    Je me pose bien la même question !!!
    l'ensemble de mon code est sur le post!

    je pensais pouvoir éviter de transmettre mes variables dans une autre page de traitement avec un header("content-type: text/x-csv") mais je crois qu'il faut que je m'y intéresse non ?

  7. #7
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Bonjour,

    Pourquoi si tu lis les données dans la base en ligne à ligne ne ferrais tu pas celà:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
      $fp = fopen('file.csv', 'w');
    //Premiere ligne ; nom des champs :
      $csv_sortie = "Immatriculation,Marque,Modele";
      fputcsv($fp, split(',',$csv_sortie));
     
    while($donnees=mysql_fetch_array($resultat))
      {
      ... du code divers
      // on s'occupe du csv
      $csv_sortie = $donnees['champ1'] . "," .$donnees['champ2'] . "," .$donnees['champ3']; 
      fputcsv($fp, split(',',$csv_sortie));
      }
      fclose($fp); // On ferme le fichier
    Pour les retours, en ligne à ligne pas besoin ...

Discussions similaires

  1. Générer un csv disposant de plusieurs feuilles
    Par DanaX dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 27/11/2008, 16h41
  2. Générer un CSV téléchargeable
    Par memberteam dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 25/09/2008, 16h33
  3. Générer un csv dans une popup avec IE et Firefox
    Par valocius dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/10/2007, 09h15
  4. Générer fichier CSV PL-SQL
    Par refrider dans le forum SQL
    Réponses: 5
    Dernier message: 31/08/2007, 15h36
  5. [CSV] Générer un CSV automatique de ma base en PHP
    Par guy2004 dans le forum Langage
    Réponses: 3
    Dernier message: 28/03/2007, 09h29

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