Page 1 sur 1

Fichier CSV

Posté : 14 mars 2008, 22:31
par jobine
Bonjour,

Voici mon "projet":

En fonction de donnée contenur dans plusieurs table de ma bdd. Je veux créer un fichier CSV que l'utilisateur pourra télécharger pour son usage personnel.

Mon problème se trouve dans la création du fichier. Après quelques recherche j'ai trouver un début de code mais qui donne une colonne au lieu d'une ligne (Dans le fichier CSV ouvert avec excel).

De plus, j'ai pas les titres des colonnes (qui devraient correspondre aux champs dans mes tables).

$select= "SELECT * FROM xxx";
$result = mysql_query($select) or die ('Erreur : '.mysql_error() );
$row = mysql_fetch_row($result);

$fp = fopen('file.csv', 'w');

foreach ($row as $line) {
    fputcsv($fp, split(',', $line));
}

fclose($fp);
Qu'est-ce que je doit faire pour afficher le titre des colonnes et que les donnée soit en ligne plutôt qu'en colonne.

Je sais qu'il y a bien d'autre truc a faire mais je veux comprendre le début pour m'attaquer au reste après.

MErci de votre aide

Posté : 14 mars 2008, 23:56
par Hywan
Bonsoir :).

Pour afficher le nom des colonnes, il faut utiliser une requête SQL de ce genre :

Code : Tout sélectionner

SHOW COLUMNS FROM table
De cette façon, tu auras le nom de tous tes champs, soit tes colonnes.

Pour ton affichage en colonne plutôt qu'en ligne, j'avoue ne pas bien comprendre. Si le but est d'obtenir un tableau, les têtes de colonnes seraient le nom des champs, puis on aurait en dessous les valeurs associées aux colonnes, soit un affichage normal. J'entends par affichage normal : pour chaque entrée dans ta base de données, tu l'affiches de façon naturelle, i.e. comme un affichage pour un livre d'or, des messages, des commentaires etc., ligne par ligne.
Si tu veux construire ton CSV horizontalement, ça ne sera pas lisible de toute façon.

Donc ta question m'intrigue ;-).

Posté : 15 mars 2008, 02:29
par jobine
Merci pour ta réponse,

Je vais essayer d'être plus claire.

Je veux un fichier qui donnerais quelque chose comme ça dans excel.


Nom Prénom code divers ...
joe bine ede3 truc
Noel père hohoho h3h3h3
...

En ce moment j'ai
joe
bine
ede3
truc


Est-ce que c'est plus claire???

Merci

Posté : 15 mars 2008, 05:30
par Patriboom
Je soupçonne le split d'avoir quelque chose à faire là-dedans.
Je vois que tu reproduis fidèlement le modèle de la page http://ca3.php.net/manual/fr/function.fputcsv.php, mais je me demande quel séparateur est mis par http://ca3.php.net/manual/fr/function.m ... ch-row.php

Dans la page de fputcsv, tu vois la table remplie artificiellement et ses éléments séparés par des virgules. Quel est le séparateur généré par mysql_fetch_row ?
HyWaN saura répondre.

Posté : 15 mars 2008, 13:45
par jobine
Faut bien commencer quelque part ... :D.

Posté : 15 mars 2008, 13:54
par Hywan
HyWaN saura répondre.
Ah bon ?
Bien, je tente une réponse. Le parcours verticale est plus compliqué qu'horizontal, et j'ai du mal à voir où se situe ton problème en fait.

Voici ce que je propose, à l'aide de la fonction fputcsv :
while($row = mysql_fetch_row($query))
    fputcsv($fo, $row);
On utilise mysql_fetch_row car apparement fputcsv préfère un tableau indexé en entrée.

Ta variable $query est la sélection de ce que tu veux mettre dans ton fichier.
Pour les colonnes, il me semble que c'est un peu différent. Il doit retourner une colonne par ligne (par $row ... on se mélange les termes ^^). Chaque valeur retournée par mysql_fetch_* n'est en fait que des informations pour un seul champ ! Il faudrait donc construire le tableau indexé avant. Je ne connais plus les valeurs retournées par SHOW COLUMNS, à toi de voir, c'est assez facile.

Posté : 15 mars 2008, 14:46
par jobine
Merci,

Je vais tester tout ça en fin de semaine et je vous en reparle.

Posté : 15 mars 2008, 23:31
par Aureusms
HyWaN saura répondre.
Quelle responsabilité !!! :lol:

Posté : 17 mars 2008, 16:07
par Patriboom
HyWaN saura répondre.
Ah bon ?
Bien, je tente une réponse. Le parcours verticale est plus compliqué qu'horizontal, et j'ai du mal à voir où se situe ton problème en fait.
Ben quoi, c'est une marque de confiance, une appréciation de ses talents. Non?

Posté : 17 mars 2008, 16:57
par Hywan
Oui oui, je l'ai pas mal pris ne t'en fais pas ;-).
C'est juste que si j'échoue, je passe vraiment pour un blaireau lol. Bon, certes, il n'y a pas trop de risques aux vues de la question.
Il n'y a pas de confusion, ne t'en fais pas :).

Posté : 17 mars 2008, 22:32
par jobine
Des nouvelles...

Voici ce que j'ai faite.
$fp = fopen('file.csv', 'w');



$select= "SELECT * FROM test";
$result = mysql_query($select) or die ('Erreur2 : '.mysql_error() );

while($row = mysql_fetch_row($result)){
    fputcsv($fp, $row, ';'); 

}

fclose($fp);

Ça me donne pas mal ce que je veux sauf pour le titre que je vais mettre moi même avant d'insérer les données. De tout façon, le titre de mes champs de tables ne sont pas toujours dans un language correcte.

Je continue mon travail , je dois insérer d'autre donnée qui viennent d'une autre table mais relier aux premières.

Je vous revient avec surement d'autre problème :oops:

Posté : 17 mars 2008, 23:38
par Hywan
Je vous revient avec surement d'autre problème :oops:
Mais ce sera avec joie :).
Tu as déjà réussi à résoudre ton premier problème et tu as appris des choses. Pour moi, l'objectif est atteint. Je suis impatient que tu reviennes avec de nouvelles questions ;-). Enfin non, parce que si tu reviens, c'est que t'as un problème :lol:. Mais on ne t'en voudra pas de poser une question ;-).

Si ton sujet est résolu, penses à le noter.