Générer 1 fichier csv et le télécharger

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • Visiteur
    Le visiteur a répondu
    Envoyé par elecoest Voir le message
    ben, c'est un csv pas un xls donc oui c'est normal pour moi
    Excellente remarque! Je dois être assez fatigué en cette fin d'année. Merci encore pour ton aide sur ce sujet, tu m'as bien dépanné.

    Laisser un commentaire:


  • elecoest
    a répondu
    ben, c'est un csv pas un xls donc oui c'est normal pour moi

    Laisser un commentaire:


  • Visiteur
    Le visiteur a répondu
    Envoyé par elecoest Voir le message
    hello,

    rien de plus que ce que décrit dans la doc de joomla : https://docs.joomla.org/Selecting_da...g_JDatabase/fr
    Ok. Merci pour cette info, car j'avais fait une belle sortie de route. Tout compris, et ça fonctionne enfin.
    Un seul défaut constaté: la 1ère ligne reprenant les intitulés des rubriques de la Table de BDD est traitée comme une simple ligne de données, et ne s'intègre donc pas dans la ligne de définition des colonnes d'Excel !
    Certes l'utilisateur peut aisément recopier chaque titre de rubrique et le coller une ligne plus haut dans les titres des colonnes. Mais ce serait chouette d'arriver à l'intégration directe !
    As-tu remarqué ce petit défaut ?

    Laisser un commentaire:


  • elecoest
    a répondu
    hello,

    rien de plus que ce que décrit dans la doc de joomla : https://docs.joomla.org/Selecting_da...g_JDatabase/fr

    Laisser un commentaire:


  • Visiteur
    Le visiteur a répondu
    Envoyé par elecoest Voir le message
    euh...

    c'est ces lignes qui génère les items
    $db->setQuery($query); $items = $db->loadObjectList(); les items sont générés avant de les écrire dans un fichier.
    Tout à fait d'accord. Et c'est bien ce que j'ai écrit précédemment. Cette méthode n'est pas sélective, elle reprend systématiquement la totalité des champs de la table. Et par malchance, il y a dans la table "users" dont j'ai besoin quelques champs de texte -sans intérêt pour moi- qui viennent chahuter les cellules Excel bien trop petites pour les contenir.
    Je vais reprendre mes tests. Il y a quelque chose qui m'échappe.

    Stp, pourrais-tu me donner le descriptif de ta connexion à la BDD, ainsi que ta requête càd:

    Code PHP:
    $db = ...
    $query = ... 
    Je comprendrai mieux ainsi quel type de mysql tu utilises ensuite. Merci beaucoup.
    Dernière édition par Visiteur à 14/12/2018, 07h09

    Laisser un commentaire:


  • elecoest
    a répondu
    euh...

    c'est ces lignes qui génère les items
    $db->setQuery($query); $items = $db->loadObjectList(); les items sont générés avant de les écrire dans un fichier.

    Laisser un commentaire:


  • Visiteur
    Le visiteur a répondu
    Envoyé par elecoest Voir le message
    en modifiant ta query avec la variable $query

    $db->setQuery($query);
    C'est bien ce que je pensais. J'ai bien essayé de préparer un select tel que: "SELECT name, username, email FROM ..." et d'écrire dans le fichier csv le tableau issu de la requête. Je n'ai pas d'erreur, mais en final j'ai toujours la totalité de ma table en colonnes et en lignes. Comme si la fonction spécialisée "fputcsv()" était bétonnée pour tout prendre de la table, sans exception aucune !
    Et ceci joue même si dans ma requête j'ai placé des conditions du type "WHERE". La macro s'en moque ! Je récupère ainsi de ma table "users" jusqu'au super-administrateur. Aïe !!!
    Dernière édition par Visiteur à 13/12/2018, 11h34

    Laisser un commentaire:


  • elecoest
    a répondu
    en modifiant ta query avec la variable $query

    $db->setQuery($query);

    Laisser un commentaire:


  • Visiteur
    Le visiteur a répondu
    Envoyé par elecoest Voir le message
    perso j'utilise :
    Code:
    $db->setQuery($query);
    $items = $db->loadObjectList();
    
    $csv = fopen('php://output', 'w');
    fputs($csv, $bom = (chr(0xEF) . chr(0xBB) . chr(0xBF)));
    $header = array_keys($db->getTableColumns('#__mytable'));
    fputcsv($csv, $header, ';');
    foreach ($items as $lines) {
    fputcsv($csv, (array)$lines, ';', '"');
    }
    
    return fclose($csv);
    @elecoest:
    Pourrais-tu stp me dire comment ne récupérer que certaines rubriques de la table traitée ?
    Par exemple, je traite la table "users" et je n'ai besoin que de "username, name et email" (ceci aurait déjà l'avantage de ne pas générer une erreur du type "vous dépassez la capacité en nombre de cellules").
    Avec mes remerciements anticipés.

    Laisser un commentaire:


  • Visiteur
    Le visiteur a répondu
    Envoyé par elecoest Voir le message
    perso j'utilise :
    Code:
    $db->setQuery($query);
    $items = $db->loadObjectList();
    
    $csv = fopen('php://output', 'w');
    fputs($csv, $bom = (chr(0xEF) . chr(0xBB) . chr(0xBF)));
    $header = array_keys($db->getTableColumns('#__mytable'));
    fputcsv($csv, $header, ';');
    foreach ($items as $lines) {
    fputcsv($csv, (array)$lines, ';', '"');
    }
    
    return fclose($csv);
    et çà marche
    Merci beaucoup elecoest. Je vais tester ceci dans mon script. Mais, sauf erreur, il manque les instructions pour le téléchargement du fichier "output", et il me semble qu'il lui manque le suffixe ".csv" pour être correctement repris et assimilé par Excel ou compatible !
    Dernière édition par Visiteur à 07/12/2018, 08h25

    Laisser un commentaire:


  • elecoest
    a répondu
    perso j'utilise :
    Code:
    $db->setQuery($query);
            $items = $db->loadObjectList();
    
            $csv = fopen('php://output', 'w');
            fputs($csv, $bom = (chr(0xEF) . chr(0xBB) . chr(0xBF)));
            $header = array_keys($db->getTableColumns('#__mytable'));
            fputcsv($csv, $header, ';');
            foreach ($items as $lines) {
                fputcsv($csv, (array)$lines, ';', '"');
            }
    
            return fclose($csv);
    et çà marche

    Laisser un commentaire:


  • Visiteur
    Le visiteur a répondu
    Ne trouvant pas de solution qui me convienne, je viens de créer mon fichier csv tout comme un fichier texte et en respectant la structure attendue par Excel.
    Même combat : pas d'erreur système ou autre, mais que je mette n'importe quoi dans ce fichier texte ... il est systématiquement rempli du fichier "index.php" de mon site, dès que je crée ce nouveau fichier !

    J'ai vu sur différents forums des personnes se plaindre du même constat.

    Que faut-il faire -commande spéciale ???- pour éviter ce pépin ?

    Laisser un commentaire:


  • Visiteur
    Le visiteur a répondu
    Envoyé par woluweb Voir le message
    Bonjour,

    Si ce que vous souhaitez afficher/télécharger dans un fichier CSV provient des tables Joomla (articles, utilisateurs, ...), vous pouvez utiliser ce super script de cavo789 :

    https://github.com/cavo789/joomla_show_table
    Mon souci ne réside pas dans l'extraction de données de ma BDD. Ma variable tableau possède déjà les données dont j'ai besoin.

    Laisser un commentaire:


  • woluweb
    a répondu
    Bonjour,

    Si ce que vous souhaitez afficher/télécharger dans un fichier CSV provient des tables Joomla (articles, utilisateurs, ...), vous pouvez utiliser ce super script de cavo789 :

    Extract informations from your Joomla database and display them in a raw table; allowing to quickly connect that table into a spreadsheet program (like MS Excel) - cavo789/joomla_show_table

    Laisser un commentaire:


  • Visiteur
    Le visiteur a crée un sujet Générer 1 fichier csv et le télécharger

    Générer 1 fichier csv et le télécharger

    Bonjour,

    Je coinçe sur la rédaction d'un script en php qui doit, à partir d'une variable tableau unidimensionnel déjà rempli, me générer un fichier CSV puis me le técharger (pour intégration ensuite dans Excel).
    J'ai déjà passé de nombreuses heures à ferrailler, et j'ai tenté d'appliquer des modèles trouvés sur la toile: rien n'y fait. Tous les résultats me donnent:
    • soit un fichier vide,
    • soit la copie de mon fichier "index.php" !
    Voici le script que je tente d'utiliser sans succès. Sauf erreur, c'est la conversion d'un élément de ma variable tableau en données CSV qui foire ... et je télécharge un fichier vide !

    Code PHP:

    // la variable de type array() est $pass, elle contient mes lignes de données (chaque ligne n'ayant qu'une seule donnée NOM
    $fp fopen('test.csv''w');
    foreach(
    $pass as $fields) {
    fputcsv($fp$fields';');
    }

    fclose($fp);
    $fichier "test.csv";
    $chemin="./test.csv";
    header('Content-disposition: attachment; filename="' $fichier '"');
    header('Content-Type: text/csv');
    header('Content-Transfer-Encoding: binary');
    header('Content-Length: 'filesize($chemin));
    header('Pragma: no-cache');
    header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
    header('Expires: 0'); 
    Je pense mal utiliser la fonction de conversion "fputcsv()".

    Grand merci pour vos conseils éclairés.

    nb: j'ai bien testé le contenu de $pass, et le téléchargement fonctionne parfaitement

Annonce

Réduire
Aucune annonce pour le moment.

Partenaire de l'association

Réduire

Hébergeur Web PlanetHoster
Travaille ...
X