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 ?

  1. Et je n'ai pas réussi à trouver la solution pour que mon script propose le téléchargement du fichier Csv sous mac ? et si ce n'est pas possible j'aimerais qu'il s'affiche au moins avec tous les séparateurs que j'ai ajouté.

Si une âme charitable veut bien m'aider, je t'en serait éternellement reconnaissante :)

Merci de votre aide !

Ce que je fais

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";
}
?>

Ce que je veux

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

Ce que j'obtiens

Voila ce que j'obtiens sous mac/Chrome

3 réponses


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');
Lythana
Auteur

Tout d'abord merci pour ta réponse , je vais essayer et je te tiens au courant :)

Lythana
Auteur

Coucou c'était pour te remercier, tout marche nickel ! Merci beaucoup :)