Bonjour a tous,
Après plusieurs recherches sur divers forums, j'ai réussi à exporter des données de ma bdd mysql sur un fichier CSV. Quand je lance le script sur Windows via n'importe quel navigateur tout fonctionne, en effet lorsque l'utilisateur clique sur le lien qui renvoie à mon script export, il voit apparaître une boîte de dialogue qui lui propose de lire ou d'enregistrer le Csv.
Cependant, lorsque je réalise le test à partir d'un mac sous chrome mozilla ou safari, le fichier Csv apparaît directement sur le navigateur sans donner la possibilité à l'utilisateur de l'enregistrer et mes données ne sont pas affichées comme je l'aimerais (les accents ne sont pas reconnus et la plupart de mes séparateurs ne sont pas affichés).
1.J'ai fait des recherches sur d'autres forums, je pense que j'ai un problème d'encodage (le format est en UTF-8 )mais je ne sais pas lequel choisir ?
Si une âme charitable veut bien m'aider, je t'en serait éternellement reconnaissante :)
Merci de votre aide !
Voici mon script export Csv
#connexion à la bdd
try {
$bdd = new PDO('mysql:host=localhost;dbname=', '','');
}
catch (Exception $e)
{
die ('Erreur:' .$e->getMessage());
}
#Création du CSV
header("Content-Type: text/csv; charset=UTF-8");
header("Content-disposition: filename=dashboard.csv");
$separateur = ";";
$separateur2 = ";;";
#Tableau 1 Contributeur
$Contributeurs = $bdd->prepare('SELECT Contributeur FROM contributeurs ORDER BY nb_ModifsPCI DESC LIMIT 7 ; '); #requête
$Tableau = "Contributeurs"; #Titre Tableau
$entete = array("Pseudo"); #Entêtes
#Tableau 2 Articles - Modifies
$MoinsModifs = $bdd->prepare('SELECT Titre, DateModif, Contributeur, NombreModifs, Commentaire FROM Articles
ORDER BY NombreModifs
LIMIT 10;');
$Tableau2= 'Articles - Modifiés'; #Titre tableau
$entetes2 = array('Article', 'Date dernière modification', 'Commentaire', 'Contributeur'); #entetes
#Tableau 3 Articles + Modifies
$PlusModifs = $bdd->prepare('SELECT Titre, DateModif, Contributeur, NombreModifs, Commentaire FROM Articles
ORDER BY NombreModifs DESC
LIMIT 10;'); #Requete
$Tableau3= 'Articles + Modifiés';#Titre tableau
$entetes3 = array('Article', 'Date dernière modification', 'Commentaire', 'Contributeur');#entetes
#Tableau 4 Articles + Consultes
$PlusVues = $bdd->prepare('SELECT Titre, NombreVues FROM Articles ORDER BY NombreVues DESC LIMIT 10;'); #Requete
$Tableau4= 'Articles + Consultés';#Titre tableau
$entetes4 = array('Article', 'Nombres de vues');#entetes
#Tableau 5 Articles - Consultes
$MoinsVues = $bdd->prepare('SELECT Titre, NombreVues FROM Articles ORDER BY NombreVues LIMIT 10;'); #Requete
$Tableau5= 'Articles - Consultés';#Titre tableau
$entetes5 = array('Article', 'Nombres de vues');#entetes
#Insertion du contenu
#Tableau 1
echo ($separateur.$Tableau)."\r\n";
echo implode ($separateur,$entete)."\r\n";
$Contributeurs ->execute(array());
While ( $donnees=$Contributeurs -> fetch()) # condition vérifant que les valeurs entrées sont conforment à celles de la bdd
{
// Création du contenu du tableau
$lignes[] = array($donnees["Contributeur"]);
}
foreach ($lignes as $ligne) {
echo implode ($separateur,$ligne)."\r\n";
}
#Separateur
echo $separateur2."\r\n" ;
#Tableau 2
echo ($separateur.$Tableau2)."\r\n";
echo implode ($separateur,$entetes2)."\r\n";
$MoinsModifs -> execute(array());
While ( $donnees2=$MoinsModifs -> fetch()) # condition vérifant que les valeurs entrées sont conforment à celles de la bdd
{
// Création du contenu du tableau
$lignes2 []= array($donnees2["Titre"], $donnees2["DateModif"], $donnees2["Commentaire"], $donnees2["Contributeur"]);
}
foreach ($lignes2 as $ligne) {
echo implode ($separateur,$ligne)."\r\n";
}
#Separateur
echo $separateur2."\r\n" ;
#Tableau 3
echo ($separateur.$Tableau3)."\r\n";
echo implode ($separateur,$entetes3)."\r\n";
$PlusModifs -> execute(array());
While ( $donnees3=$PlusModifs -> fetch()) # condition vérifant que les valeurs entrées sont conforment à celles de la bdd
{
// Création du contenu du tableau
$lignes3 []= array($donnees3["Titre"], $donnees3["DateModif"], $donnees3["Commentaire"], $donnees3["Contributeur"]);
}
foreach ($lignes3 as $ligne) {
echo implode ($separateur,$ligne)."\r\n";
}
#Separateur
echo $separateur2."\r\n" ;
#Tableau 4
echo ($separateur.$Tableau4)."\r\n";
echo implode ($separateur,$entetes4)."\r\n";
$PlusVues -> execute(array());
While ( $donnees4=$PlusVues -> fetch()) # condition vérifant que les valeurs entrées sont conforment à celles de la bdd
{
// Création du contenu du tableau
$lignes4 []= array($donnees4["Titre"], $donnees4["NombreVues"]);
}
foreach ($lignes4 as $ligne) {
echo implode ($separateur,$ligne)."\r\n";
}
#Separateur
echo $separateur2."\r\n" ;
#Tableau 5
echo ($separateur.$Tableau5)."\r\n";
echo implode ($separateur,$entetes5)."\r\n";
$MoinsVues -> execute(array());
While ( $donnees5=$MoinsVues -> fetch()) # condition vérifant que les valeurs entrées sont conforment à celles de la bdd
{
// Création du contenu du tableau
$lignes5 []= array($donnees5["Titre"], $donnees5["NombreVues"]);
}
foreach ($lignes5 as $ligne) {
echo implode ($separateur,$ligne)."\r\n";
}
?>
Comme je vous l'ai dit au-dessus, j'aimerai générer une boite de dialogue sous mac afin de proposer à l'utilisateur de lire ou d'enregistrer le csv.Si ce n'est pas possible j'aimerais au moins que les tous les séparateurs apparaissent
Voila à quoi j'aimerai que ressemble mon csv sous mac
Voila ce que j'obtiens sous mac/Chrome
C'est un problème de type mime
le type text/css est affiché directement à l'écran (c'est Chrome qui décide)
Essaye en changeant le type mime par quelque chose qui n'est pas affichable ("application/zip" ...)
Pour les accents, il faut s'assurer de communiquer en UTF-8 avec la BD
$bdd = new PDO('mysql:host=localhost;dbname=xxxx; charset=utf8', 'root','secret');