exportation du database sous forme d'un tableau CSV normal sans virgule

Eléphanteau du PHP | 25 Messages

24 nov. 2023, 14:50

Bonjour tout le monde,

comme d'habitude je me dirige vers vous à fin d'avoir un petit coup de main pour modifier mon code de sorte qu'il m'exporte les informations de ma Database sous forme d'un tableau normal avec extension "CSV"

résultat actuel information encombrés de toute les colonnes sur une cellule séparé avec des virgules

Résultat voulu chaque cellule et chaque colonne à sa place ,

Mon code :

Code : Tout sélectionner

<?php ob_start(); include 'db.php'; $user= $_GET['user']; $sql = "SELECT * FROM invent where user='$user' "; header('Content-type: text/csv; charset=UTF-8'); header('Content-Disposition: attachment; filename=Customers_Export.csv'); $user_query = mysqli_query($conn,$sql); //write data to file $flag = false; while ($row = mysqli_fetch_assoc($user_query)) { if (!$flag) { //display field/column names as first row echo implode("\t", array_keys($row)) ."\r\n"; $flag = true; } echo implode("\t", array_values($row)) ."\r\n"; } ob_end_flush(); ?>


je vous remercie infiniment pour votre temps et votre collaboration cher(e)s ami(e)s.

Avatar du membre
Mammouth du PHP | 1609 Messages

24 nov. 2023, 15:05

Salut, ce que tu as fait est déjà pas mal. Je pense que tu peux terminer avec peu de changements.

Juste avant le ob_end_flush tu peux ajouter deux header en définissant $filename au préalable.
header('Content-Type: text/csv'); 
header('Content-Disposition: attachment; filename="' . $filename . '";'); 
Et si tu veux des virgules comme séparateur, il te suffit de remplacer les \t par la virgule sur les implode.

Pas très conventionnel et risque d'avoir des problèmes si il y a des virgules dans les données mais je pense que ça devrait fonctionner.

Pour faire quelque chose de plus conventionnel tu peux créer un fichier avec fopen et fputcsv et envoyer le contenu du fichier avec par exemple les mêmes header et un echo d'un file_get_contents du fichier fraichement créé.

L'avantage du fputcsv est qu'il va formater la ligne automatiquement de sorte qu'il n'y ait aucun problème pour la lire correctement dans un lecteur csv.

EDIT : j'avais pas fait gaffe qu'il y a déjà les header. Donc à part changer le echo implode, ça me semble ok. Quelque chose ne fonctionne pas comme tu veux ?
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 25 Messages

24 nov. 2023, 15:42

bonjour, Saian

j'ai déjà des headers comme vous le voyais sur mon code ,
j'ai testé votre solution mais le problème et le même les informations sont encombrées sur une cellule séparées par des virgules , le résultat que je veux un tableau normal et que chaque informations soit sur une cellules

Avatar du membre
Mammouth du PHP | 1609 Messages

24 nov. 2023, 17:27

Alors je suppose que le séparateur n'est pas le bon pour ton lecteur CSV. Essaie avec le point virgule. Avec Excel par exemple ça varie selon que c'est une version européenne ou américaine et je pense que ce doit être le point virgule pour la version européenne.
Modifié en dernier par Saian le 24 nov. 2023, 17:29, modifié 1 fois.
Développeur web depuis + de 20 ans

Mammouth du PHP | 2703 Messages

24 nov. 2023, 17:27

le coupable peut être le tableur. en faisant, fichier ouvrir dans mon tableur, cela m'ouvre une boite de dialogue ou je spécifie le séparateur et alors le fichier s'affiche correctement.