Flux rss
Collection CommentCaMarche.net
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

[php/sql] export table sql vers csv/xls

sim, le mardi 8 avril 2008 à 00:22:25
Bonjour à tous. Je chercher à exporter ma base sql vers un fichier xls/csv.
J'ai réussi à coder quelque chose qui créé un fichier, mais rien n'est enregistré.
Je n'arrive pas à comprendre pourquoi ...

Merci de votre aide !




<?php

include("../include/database.php");
$db = mysql_connect($server, $user, $password); // connexion à la base
mysql_select_db($database); // sélection de la base
$req = mysql_query("SELECT * FROM liste"); // on sélectionne les enregistrements
$res = mysql_numrows($req); // on compte le nombre de résultats

$file = ("bdd_fichier.xls"); // le fichier doit déjà exister
if(!$myfile = fopen($file, "w")) //on ouvre le fichier
{
print("erreur: ");
print("'$filename' n'existe pas!\n");
exit;
}

$email=$liste['email'];

WHILE($res!=$i) // 5. chaque fois que "$res" est dif. de "$i", donc qu'il y a un enreg.

{
$numero = mysql_result($req,$i,$email); // on récupère les champs




//ecriture
fputs($myfile,"$email\t $name\n"); //on insère une tabulation \t pour changer de colonne et un retour chariot \n pour changer de ligne


$i++; // 8. on ajoute un au compteur et on retourne à WHILE
}

//fermeture fichier
fclose($myfile); //on ferme le fichier
echo "<center><h2>La table a été sauvegardée...</h2></center>";

mysql_close(); // 9. on ferme la connexion
?>
<form name="form0">
<center><br><br><input type="button" value="Fermer" onClick="self.close()" name="button3"></center>
</form> 
 
 
Configuration: Windows XP
Firefox 2.0.0.13
Répondre à sim  Signaler ce message aux modérateurs Aller au dernier message

1


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
simono44, le mardi 8 avril 2008 à 10:55:50
personne pour ce ptit problème ? j'arrive vraiment pas à trouver ...
Répondre à simono44

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
DAG, le jeudi 11 septembre 2008 à 18:25:00
Si tu as réussis, je veux bien le code ! Je galere la dessus !
Merci
Répondre à DAG

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
TiTim, le mardi 7 octobre 2008 à 09:35:25
J'ai l'impression que tu as un soucis sur ton parcours et sur ton insertion. De plus, tu devrais utiliser des "," pour changer de colonne et non des "\t"

voici un exemple de ce que tu peux faire (dans mon cas j'ai utilisé le framework Zend) :

$file = fopen("[path]/nomFichier.csv", "w"); 
 		if (!$file)
 		{
			echo "<p>Impossible d'ouvrir un fichier distant en écriture.\n";
			exit;
 		}
                $stmt = $db->query($sql);
		$result = $stmt->fetchAll();
		$db->closeConnection();
		
		
	  	$elems = count($result);
	  	$i = 0;
		while ($i < $elems)
		{
			$row = $result[$i];
			foreach ($row as $e)
			{
                                //$str est équivalent à "$e,"
                                //on récupère l'élément $e puis on place une "," derriere.
                                // les \"  insérés servent à échapper les \n qu'il porrait y avoir dans un champ texte de la                                                table par exemple
				$str = "\"$e\",";
				fwrite ($file, $str);
			}	
			fwrite ($file, "\n");
			$i++;
		}
		fclose($file);
	}
Répondre à TiTim

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
DAG, le mardi 7 octobre 2008 à 09:51:01
Salut, moi j'avais trouvé un code très simple. Si ça peut aider je le met :
<?php
	include('../conn_deconn/session.php');
	include '../bdd/connexion_bdd.php';

//Premiere ligne ; nom des champs :
$xls_output = "MATRICULE;NOM;PRENOM";
$xls_output .= "\n";

//Requete SQL
$query='SELECT matricule, nom, prenom FROM une_table';
$result = mysql_query($query) or die(mysql_error());

//Boucle sur les resultats
while($row = mysql_fetch_array($result))
{
	$xls_output .= $row[0] . ";" . $row[1] . ";" . $row[2];
	$xls_output .= "\n";
}

header("Content-type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=export_" . date("d-m-Y").".csv");

print $xls_output;

exit;
?>

Voila, on créé une variable "$xls_output" à laquelle on commence par attribuer les premiers champs du tableau (les titre des colonnes quoi), puis on créé la requête et on l'exécute. Dans le "while" on parcoure cette requête et on complète pour chaque enregistrement la variable "$xls_output". Et à chaque fois que l'ont complete cette variable, on met des ";" entre chaque valeurs et on termine la ligne par un "\n".
Ceci va permettre de détecter les champs car ils serons situés entre les ";", mais aussi de détecter quand une lignes sera terminée grâce à l'"\n".
Enfin, grâce au "header", on exporte le tout dans un fichier qui s'appellera "export_la_date_du_jour.csv".

Pour ça fonctionne, il faut bien sur faire gaffe de ne pas trouver de ";" ou d'"\n" dans les valeurs que tu rentres...
Pour ça j'ai créé une fonction, et je l'appelle pour tous les enregistrements que je rentre dans mon fichier :
function lisserChaineCarac($chaineCarac)
{
	$chaineCarac = str_replace(';',',',$chaineCarac);
	$chaineCarac = str_replace(CHR(13),' ',$chaineCarac);
	$chaineCarac = str_replace(CHR(10),' ',$chaineCarac);
	return $chaineCarac;
}

Il doit déjà en avoir des toutes faite mais bon...
Répondre à DAG

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Kyrliann, le mardi 21 octobre 2008 à 15:36:12
Ca ne prendrait pas si on utilise le caractère d'échappement pour ces caractères spéciaux ? \; par ex...
Répondre à Kyrliann

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
DAG1, le mardi 21 octobre 2008 à 16:13:51
Si je pense, mais pour le lire avec Excel ça va être galère je crois...
Répondre à DAG1

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 Kyrliann, le mercredi 22 octobre 2008 à 10:09:53
lolol j'ai testé quand même par curiosité, je pensais qu'il n'allait pas enlever les backslashs en insérant le texte ... en fait il fait pire, il enlève le " ; " et laisse le backslash =o))
Répondre à Kyrliann
Quelques erreurs en php/sql (Résolu) Bonjour, Je me suis lancé il y a peu à la création de site php/sql et c'est pas encore évident ^^ J'ai deux tables : une 'group' et une 'lien' La table 'group' est composée d'un champ 'id' et un... www.commentcamarche.net/forum/affich-6217451-quelques-erreurs-en-php-sql
Top 5 mensuelle en PHP/sql (Résolu) Bonjour, J'aimerai savoir comment faire un top 5 mensuelle en php. Voilà mon code : $reponse = mysql_query("SELECT * FROM table ORDER BY vote DESC LIMIT 0,5"); while ($donnees = mysql_fetch_array($reponse) ) Je débute en PHP/sql et je ne sais pas... www.commentcamarche.net/forum/affich-9343576-top-5-mensuelle-en-php-sql
Script transfert data table1 vers table2 php (Résolu) Bonjour Quelqu'un pourrait-il me donner le scipt php suivant : ancienne table : (contient environ 30 lignes) nom = table 1. nbre champs = 2. nom des champs = nom, ville. nouvelle table : nom = table 2 nbre de champs = 3 nom des champs = nom,... www.commentcamarche.net/forum/affich-2226921-script-transfert-data-table1-vers-table2-php
Migrer une table ACCESS vers MySQL (Résolu)Bonjour, J'aimerai savoir comment migrer une base de données contenant (au minimum) une table provenant de ACCESS 2000 vers MySQL. Pour créer mon site, j'utilise à la fois EasyPHP (contient : PHMmyAdmin, MySQL, PHP, Apache) dont la version... www.commentcamarche.net/forum/affich-4134385-migrer-une-table-access-vers-mysql
Export structure table access sous forme SQL (Résolu)Bonjour, souhaitant transférer des tables (puis les données) d'une base access vers MySQL (ou autre), je me demande comment générer à partir d'access les ordres sql CREATE TABLE pour chacune des tables. MA Access ne semble pas le proposer.... www.commentcamarche.net/forum/affich-3914498-export-structure-table-access-sous-forme-sql
PHP et plusieurs lignes SQL à ID identiques ? (Résolu)Bonsoir, Voilà je débute en PHP/SQL. J'arrive à faire ce que je veux tant que je crée tout de zéro, mais là je dois récupérer une base déjà conçue et l'exploiter, ce qui est hélas autre chose. J'ai pû comprendre les jointures de moi... www.commentcamarche.net/forum/affich-4411949-php-et-plusieurs-lignes-sql-a-id-identiques