[RESOLU] Export d'une table en fichier txt : affichage des colonnes et resultats

Eléphanteau du PHP | 11 Messages

17 oct. 2018, 20:31

Bonjour,

Grâce à ce code ci-dessous, je peux exporter un résultat de requête sur une base (en local pour le moment) dans un fichier texte, mais le souci est qu'il est présenté avec les noms des colonnes sur une ligne suivi des résultats , sans retour entre chaque donnée.
/* Attempt MySQL server connection. */  
$connection = mysqli_connect($database_server, $database_username, $database_password, $database_name);

// Check connection
if($connection === false){
    die("ERROR: Could not connect. " . mysqli_connect_error());
}

$query = "SELECT deg_0,deg_1,deg_2,deg_3,deg_4,deg_5,deg_6,deg_7,deg_8,deg_9,deg_10 FROM degree WHERE id = 1";
$result = mysqli_query($connection, $query);

$number_of_fields = mysqli_num_fields($result);
$headers = array();
for ($i = 0; $i < $number_of_fields; $i++) {
    $headers[] = mysqli_field_name($result , $i);
}
$fp = fopen('php://output', 'w');
if ($fp && $result) {
    header('Content-Type: text/txt');
    header('Content-Disposition: attachment; filename="export.txt"');
    header('Pragma: no-cache');
    header('Expires: 0');
    fputcsv($fp, $headers);
    while ($row = $result->fetch_array(MYSQLI_NUM)) {
        fputcsv($fp, array_values($row));
    }
    die;
}

function mysqli_field_name($result, $field_offset)
{
    $properties = mysqli_fetch_field_direct($result, $field_offset);
    return is_object($properties) ? $properties->name : null;
}
Me retourne ceci :

Code : Tout sélectionner

deg_0,deg_1,deg_2,deg_3,deg_4,deg_5,deg_6,deg_7,deg_8,deg_9,deg_10 20,20,20,20,19,19,19,17,17,17,17
J'ai déjà essayé plusieurs changements de variables dans ce fichier, mais impossible de mettre quoi que ce soit dans le format que je souhaite.
En fait, j'aimerais retrouver les résultats ligne par ligne, sans virgule ni espace.

Comment faire ?
Un autre script plus simple disponible ?

Merci

Mammouth du PHP | 2703 Messages

17 oct. 2018, 20:44

http://php.net/manual/fr/function.fputcsv.php
il y a donc la possibilité de changer le delimiter de ',' à ''.
ne pas mettre d'espace n'a du sens que si les données sont bien toutes sur 2 caractères, sinon, ce sera complétement inexploitable.

Eléphanteau du PHP | 11 Messages

17 oct. 2018, 22:34

Merci mais je n'y ai pas trouvé un exemple qui fonctionne..

Explication ; Le fichier doit contenir chaque donnée (des chiffres) sur une ligne pour être exploité ensuite par un programme.
ex :
0
20
15
10
3
....

Eléphanteau du PHP | 11 Messages

19 oct. 2018, 09:21

Apparemment pas faisable dans un fichier txt.. les retours a la ligne sont indiqués <br> ou \n\r.
Je les afficherai dans un premier temps en "textarea' qu'ils copieront dans un fichier txt

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

19 oct. 2018, 16:34

Hello !

Tu utilises les fonctions de génération de fichier csv. Les fichiers csv sont des fichiers textes dans lesquelles les données d'un même enregistrement / une même lignée sont séparées par un caractère (généralement un ";") et les enregistrements sont quant à eux séparés par un retour à la ligne.

Si tu veux maîtriser pleinement la génération de ton fichier et choisir si tu mets des retours à la ligne pour windows (\r\n), pour linux (\n), pour un affichage web (<br>) tu peux utiliser la fonction fwrite() et insérer dans le fichier chaque valeur séparée par ce qui te convient le mieux :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...