[RESOLU] Problème Export fichier en csv avec trop de caractere

Petit nouveau ! | 4 Messages

06 janv. 2022, 16:43

Bonjour

Je fais un export CSv à partir de ma base de données php.
J'ai un souci dans mon fichier csv, la colonne Description n'est pas bien formaté car je pense trop de lettre. toutes la zone description est sur plusieurs ligne et du coup décale tout.

auriez vous une solution ?


$sql = "SELECT `projett`.`idprojet`,`projett`.`nomprojet`,`projett`.`description` FROM `projett` ;";

$result_select = mysql_query($sql) or die(mysql_error());

$result_list = array();
while($row = mysql_fetch_array($result_select))
$result_list[] = $row;

$csv = "Nom du projet;Description;\n";

foreach($result_list as $donnees)
{
$csv .= $donnees['nomprojet'].";".$donnees['description']."\n";
$nomentier = $donnees['nomprojet'];

}

header("Content-Encoding: UTF-16LE,UTF-8");
header("Content-type: application/csv; charset=UTF-8");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-disposition: attachment; filename=Fichier_DetailDemande_Projetencours_selectionProjet_".$nomentier.".csv");
print($csv);
exit;

Petit nouveau ! | 2 Messages

06 janv. 2022, 18:53

Hello,

À mon avis le problème n'est pas tant la longueur des données que le fait qu'elles puissent contenir des sauts de lignes qu'il faudrait échapper.

Pour ce faire j'aime bien utiliser la fonction fputcsv de php.
Comme cette fonction travaille sur les fichiers, cela donne un code qui ressemble à ça:
$fp_csv = fopen('php://memory', 'r+');
foreach(... as $datas) { // pour chacune des lignes de données
  fputcsv($fp_csv, $datas, ';'); // on les ajoute dans le fichier en mémoire, voir la doc php pour ce qu'on peut passer en paramètre
}
rewind($fp_csv); // on remet le pointeur de fichier au début
$csv = stream_get_contents($fp_csv); // on récupère le contenu du fichier dans une variable

Petit nouveau ! | 4 Messages

07 janv. 2022, 11:24

Bonjour
oui ce sont mes sauts de ligne qui gene. je vais essayer votre fonction

Petit nouveau ! | 4 Messages

07 janv. 2022, 12:20

pbarroca, mes colonnes s'affichent en double et je ne voudrais pas fairee afficher toutes les colonnes. comment je peux faire ?

$sql = "SELECT `projett`.`idprojet`,`projett`.`idchefprojet`,`projett`.`nomprojet`,`projett`.`description`,`projett`.`idetat`,`projett`.`idpriorite`,`projett`.`datefin`,`projett`.`dateprisecharge`, `chefprojet`.`nomchefprojet`,`chefprojet`.`prenomchefprojet`,`marque`.`nommarque`,`perimetre`.`nomperimetre`,`typologie`.`nomtypologie`,`etat`.`nometat`,".
"`priorite`.`nompriorite` ".
"FROM `projett` ".
"INNER JOIN `chefprojet` ON `chefprojet`.`idchefprojet` = `projett`.`idchefprojet` ".
"INNER JOIN `marque` ON `marque`.`idmarque` = `projett`.`idmarque` ".
"INNER JOIN `perimetre` ON `perimetre`.`idperimetre` = `projett`.`idperimetre` ".
"INNER JOIN `typologie` ON `typologie`.`idtypologie` = `projett`.`idtypologie` ".
"INNER JOIN `etat` ON `etat`.`idetat` = `projett`.`idetat` ".
"INNER JOIN `priorite` ON `priorite`.`idpriorite` = `projett`.`idpriorite` ".
"WHERE `projett`.`idprojet` LIKE '%$numidprojet_selectionnee%' AND `projett`.`idetat` NOT LIKE 5 ;";

$result_select = mysql_query($sql) or die(mysql_error());

$result_list = array();
while($row = mysql_fetch_array($result_select))
$result_list[] = $row;

//j'aimerai ces colonnes $csv = "Nom du projet;Chef de projet;Marque;Perimetre;Typologie;Ville;Date prise en charge;Date de fin;Etat;Priorite;Description;\n";

$fp_csv = fopen('php://memory', 'w+');
foreach($result_list as $donnees)
{
fputcsv($fp_csv, $donnees, ';');
}
rewind($fp_csv);
$csv = stream_get_contents($fp_csv);

Petit nouveau ! | 4 Messages

07 janv. 2022, 15:13

c'est bon j'ai réussi. merci pour ton aide pbarroca