créer un fichier csv à partir de données mysql

Eléphant du PHP | 216 Messages

28 août 2007, 09:46

Bonjour,

j'aimerais récuprer les données d'un table d'une base mysql et les mettre dans un fichier csv.
Et j'aimerais que ce fichier csv soir enregistré sur mon serveur.

Merci d'avance pour votre aide.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 août 2007, 10:14

phpMyAdmin fait ça très bien il me semble :)

sinon tu peux utiliser la fonction fputcsv() pour créer assez facilement un fichier de type csv
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 août 2007, 10:19

Tiens, tu me rappelles que je doit faire un tutorial sur l'instruction "SELECT INTO outfile" :-k

En attendant, il reste que c'est l'instruction que je te conseille d'utiliser ;)

Le principe général, c'est que tu écrit ton SELECT pour qu'il te sélectionne les données que tu veux afficher dans ton fichier CSV, puis tu rajoute la ligne "INTO OUTFILE 'adresse/de/ton/fichier.csv' entre le SELECT et le FROM.
Sans option, il utilise la syntaxe par défaut des fichiers CSV, mais tu peux utiliser quelques options : cf documentation (Recherche la chaine "INTO OUTFILE")

Exemple d'utilisation :

Code : Tout sélectionner

SELECT champ1, champ2 INTO OUTFILE "/home/data/export_table1.csv' FROM table1
fichier export_table1.csv

Code : Tout sélectionner

val11 val21 val21 val22 val31 val32
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 août 2007, 10:24

Tiens, je ne connaissais pas.. en tout cas je sens que ça va me servir :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 216 Messages

28 août 2007, 15:13

je te remercie j'avias bien pensé à la focntion select oufile mais j'ai des problème d'autorisation sur mon serveur, il me dit user not autorised...

alors je me suis rabattu sur lla méthode suivante :

	$request = "SELECT * FROM lldiffusion_produit";
	if ($result = mysql_query($request))
	{
		while($ligne = mysql_fetch_row($result))
		{
			$id = $ligne[0];
			$marque= $ligne[1];
			$desigantion = $ligne[2];
			$univers = $ligne[3];
			$categorie = $ligne[4];
			$sous_categorie = $ligne[5];
			$resume_court = $ligne[6];
			$prix_ttc = $ligne[8];
			$frais_port = $datap['frais_port_inf'];
			$disponibilité = $ligne[9];
			$chaine ="$id;$marque;$designation;$univers $categorie $sous_vcategorie;$resume_court;$prix_tcc;$frais_port;$disponibilité;\r";
			fputcsv($fp, $chaine); 
		} 
	}	

mais j'ai le message d'errur suivant :

Fatal error: Call to undefined function: fputcsv() in /home.10.3/lldiffus/www/gerant_new_new.php on line 65


j'ai l'impression que la focntion fputcsv n'est pas connue./
Existet-il quelque chose qui remplacerais cette focntion?
Merci d'avance pour votre aide.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 août 2007, 15:32

Ok, ca veut dire que tu ne dois pas être en php5 si la fonction n'est pas présente... bah du coup je crois que tu en est réduit à un simple fputs() ou fwrite().

Après selon le type des données que tu récupères, pour les convertir au format csv par défaut, il te faut, uniquement pour les chaines de caractères, si la chaine contient au moins une guillemet ou un retour à la ligne :
- doubler toutes les guillemets qu'elle contient (avec str_replace() par exemple)
- et encapsuler la chaine avec des guillemets

Après il n'y a plus qu'à l'insérer dans ton fichier, et ouvrir le fichier généré dans ton tableur préféré pour voir le résultat :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 693 Messages

28 août 2007, 16:33

Ou alors qu'elle est desactivé par l'hébergeur.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 août 2007, 16:36

Pour les authorisations d'accès MySQL/PHP, c'est simple, il te suffit d'écrire ton fichier dans le répertoire /tmp et de le déplacer via PHP avec un rename() ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 216 Messages

29 août 2007, 11:30

j'obtiens exactement le mêm message avec cela :

SELECT * 
INTO OUTFILE '/tmp/lldiffusion_export.csv'
FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\n'
FROM lldiffusion_produit 

le message d'erreur est :

#1045 - Access denied for user: 'lldiffusion@%' (Using password: YES)

Invité
Invité n'ayant pas de compte PHPfrance

29 août 2007, 19:30

Du coup je recopie ma réponse :


première remarque, \r est le signe de fin de ligne sous Mac. Sous Unix c'est \n. et sous windows, \r\n.

Je te conseille d'utiliser la constante
PHP_EOL
pour rendre ton compte portable et être sur d'obtenir le caractère de fin de ligne.