Bonjour,

Voici mon probleme j'ai besoin d'écrire dans un fichier CSV à partir d'une base de donnée.

<?php
require_once('../Connections/SiteNom_db_con.php');
//genere un fichier csv afin de pour rajouter rapidement tout les champs SEO de toutes les pages
header("Content-Type: text/csv;");
header('Content-Disposition: attachment; filename="Export_trad_page.csv"');
header("Content-Transfer-Encoding: UTF-8");      

//recupere tous id des pages du site
$sql = "SELECT * FROM `page`"; 
$result_page=mysql_query($sql);
//Creer entete
?>
"page_id";"TITRE";"TEXTE";
<?php
//creer un ligne par SEO de page

while($row=mysql_fetch_array($result_page)){
    echo utf8_decode("\n".'"'.mysql_real_escape_string($row['page_id']).'";"'.mysql_real_escape_string($row['TITRE']).'";"'.mysql_real_escape_string($row['TEXTE']).'"');
}

?>

Ce code me genere bien un fichier CSV sauf que les colonnes ne sont pas respecté car j'ai du contenu html dans mes champs en BDD donc lorsque je tombe sur un ; ça me fait changé de colonne.
De plus avec mysql_real_escape_string j'ai des \ de partout dans mon fichier CSV et sans cette fonction mon contenu s'affiche dans 60 000 cellules.

Je ne sais pas quoi faire.

Merci par avance pour votre aide

12 réponses


scomete
Auteur
Réponse acceptée

C'est bon je me suis débrouillé avec un 4eme paramettre dans fputcsv

Salut,

Pour commencer, n'utilise pas la fonction PHP mysql (http://php.net/manual/en/function.mysql-connect.php regarde le gros warning au début).
Ensuite, tu dois échapper les champs contenant du code HTML avec la fonction htmlspecialchars() (http://php.net/manual/en/function.htmlspecialchars.php) avant de les insérer dans ton CSV. Enfin tu peux remplacer toutes les occurences de ; dans ton HTML via un simple str_replace()

scomete
Auteur

merci pour ta reponse mais je veux garder mes balise dans mon fichier csv avec la fonction htmlspecialchars() je vais les remplacer par des &lt

A ce moment là, si ce sont les ; qui te posent problème, remplace-les tout simplement ;)

Bonjour,

Autre solution pour tes ; comme séparateurs de cellules, il suffit d'écrire ton CSV avec les | comme séparation.
Car les | se retrouve rarement dans du code html.

scomete
Auteur

Comment on fait?

@Carouge10 +1

Pour cela il faut revoir la création de ton CSV et utiliser les méthodes faites pour cela.
Il te faut utiliser ces méthodes :

  • fopen => pour ouvrir un fichier
  • fputcsv => Formate une ligne en CSV et l'écrit dans un fichier
  • fclose => pour fermer le fichier

Voici un tutoriel pour créer un csv en php

Le tutoriel de Grafikart n'est pas adapter pour ce genre de programme.

scomete
Auteur

Merci pour ton tuto mais moi je souhaite mettre dans différente cellule alors que la il me propose tout dans la meme.

Il suffit de l'adapter à vos besoins. Et je rappel que delimiteur = changement de cellule....

scomete
Auteur

non justement dans le tuto délimitateur c'est juste la séparation entre les differents elements de la cellule (enfin si je me plante pas) Je viens de copier l'intégralité du tuto et j'ai 2 lignes
en a1 j'ai Adriana,Lima
et en b1 j'ai Candice,Swanepoel

et bien c'est bon.
Le délimiteur est ,
Attention dans un fichier CSV, vous n'aurez pas chaque élément dans une cellule.