[php/sql] export table sql vers csv/xls
sim
-
Kyrliann -
Kyrliann -
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 !
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>
A voir également:
- Requête sql export csv
- Export favoris chrome - Guide
- Requete sql pix - Forum PHP
- Roissy piac export - Forum Consommation & Internet
- Additions et multiplication dans des requêtes SQL ✓ - Forum MySQL
- Logiciel sql - Télécharger - Bases de données
7 réponses
Salut, moi j'avais trouvé un code très simple. Si ça peut aider je le met :
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 :
Il doit déjà en avoir des toutes faite mais bon...
<?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...
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) :
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); }
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))
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question