IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

extraire une table bdd et en faire un exel


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 187
    Points : 50
    Points
    50
    Par défaut extraire une table bdd et en faire un exel
    hello !
    voila je voudrais, pour un client qu'en allant dans l'admin avec un simple btn ca lui transfere le contenu d'une table (adresses mails de ses client) en un fichier exel

    donc ce que je compte faire c'est :
    extraire cette table dans un array et ensuite grâce a une fonction quelconque de php faire de cet array un fichier exel

    ceci vous parait 'il être la bonne méthode?
    si oui auriez vous des pistes pour les fonction php à utiliser pour faire un fichier exel, ou des explication sur la méthodologie à suivre

    merci

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Hello

    Utilise du CSV pour faire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    header('Content-Type: application/csv; encoding=utf-8');
    $query = "SELECT a,b,c FROM table";
    $statement = $pdo->prepare($query);
    if ($statement->execute()) {
    echo "a;b;c";
    $statement->setFetchMode(PDO::FETCH_ASSOC);
    foreach ($statement as $row) {
      echo implode(';', $row);
    }

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 36
    Points : 38
    Points
    38
    Par défaut
    Cette solution fonctionne, je voulais apporter une autre solution qui est peut être plus simple et qui se fait via une requete Mysql :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT tes_champs,[...]
    FROM `table`
    WHERE [conditions]
    INTO OUTFILE '/adresse/du/fichier.csv'
    FIELDS
    TERMINATED BY ';'
    OPTIONALLY ENCLOSED BY '"';
    Si tu souhaites absolument un fichier au format xls, tu peux utiliser le module pear "spreadsheet_excel_writer"

  4. #4
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 372
    Points : 5 734
    Points
    5 734
    Billets dans le blog
    1
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    Hello

    Utilise du CSV pour faire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    header('Content-Type: application/csv; encoding=utf-8');
    $query = "SELECT a,b,c FROM table";
    $statement = $pdo->prepare($query);
    if ($statement->execute()) {
    echo "a;b;c";
    $statement->setFetchMode(PDO::FETCH_ASSOC);
    foreach ($statement as $row) {
      echo implode(';', $row);
    }
    fputcsv


  6. #6
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    fputcsv

    J'oublie à chaque fois.

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    si tu veux utiliser l'output tu peux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $handle = fopen('php://output', 'ab');
    foreach ($statement as $row) {
        fputcsv($handle, $row, ';');
    }
    fclose($handle)

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    si tu veux utiliser l'output tu peux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $handle = fopen('php://output', 'ab');
    foreach ($statement as $row) {
        fputcsv($handle, $row, ';');
    }
    fclose($handle)
    classe +10.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 187
    Points : 50
    Points
    50
    Par défaut
    voici donc ce que j'ai fait et qui marche bien
    qu'en pensez vous?

    et enfin est-vce vraiment utile ou indispensable de fermer un acces a la bdd
    avec $reponse->closeCursor(); ?

    merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    <?php
    //------------------------------------------------------------
    // enregistrement des coordonnées client dans le fichier .csv
    //------------------------------------------------------------
     
    //je récupère les infos de ma table "coordonnees_clients"
     
    $fichier = fopen('coordonnees_clients.csv', 'w');	//j'ouvre le fichier en ecriture grace à 'w'
    $reponse = $bdd->query("SELECT * FROM coordonnees_clients") or die(print_r($bdd->errorInfo()));  
    while ($donnees = $reponse->fetch())
    {
    		$coordonnees = array(
    		'mail' => $donnees['mail'],
    		'societe' => $donnees['societe'],
    		'responsable' => $donnees['responsable'],
    		'tel' => $donnees['tel'],
    		'fax' => $donnees['fax'],
    		'adresse' => $donnees['adresse'],
    		'cpostal' => $donnees['cpostal'],
    		'ville' => $donnees['ville'],
    		'date_creation' => $donnees['date_creation']
    	);
     
    	fputcsv($fichier, $coordonnees);
    }
    fclose($fichier);	//je ferme l'ouverture du fichier
     
    $reponse->closeCursor(); // Termine le traitement de la requête
     
    //---------------- fin enregistrement dans fichier .cvs -------------------
     
    ?>

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    closeCursor sert uniquement si tu ne récupère pas tout les résultats

    sinon ça sert a rien ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $coordonnees = array(
    		'mail' => $donnees['mail'],
    		'societe' => $donnees['societe'],
    		'responsable' => $donnees['responsable'],
    		'tel' => $donnees['tel'],
    		'fax' => $donnees['fax'],
    		'adresse' => $donnees['adresse'],
    		'cpostal' => $donnees['cpostal'],
    		'ville' => $donnees['ville'],
    		'date_creation' => $donnees['date_creation']
    	);
    sectionne tes champs direct dans ta requete, utilise PDO::FETCH_ASSOC et fait direct :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fputcsv($fichier, $donnees);

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 187
    Points : 50
    Points
    50
    Par défaut
    escuses moi mais je vais sur php.net
    pour trouver PDO::FETCH_ASSOC
    mais je n' arrive pas à le trouver,
    je tappe dans l'url : php.net/PDO::FETCH_ASSOC
    comment fais tu pour le trouver?
    merci

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    http://php.net/manual/en/pdostatement.fetch.php

    mais il suffisait juste de relire nos exemples

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 187
    Points : 50
    Points
    50
    Par défaut
    merci pour tout, une dernière question cependant :
    finalement je ne comprend pas pourquoi ca m'enregistre bien toutes les ligne de ma table
    je m'explique, j'ai l’impression que vu comment est fait mon code
    que normalement ca devrai me me créer :
    - un array de ma première ligne puis ca l’écrit dans le fichier.cvs
    - puis un array de ma deuxième ligne puis ca l’écrit dans le fichier.cvs
    ...
    la deuxieme ecriture n'ecrase donc pas la premiere pourquoi?
    donc apparemment ca écrase le fichier que a chaque premiere écriture succédant l' ouverture...?

    peux m'expliquer le déroulement merci beaucoup

  14. #14
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    y'a pas de fichier la, le php://ouput c'est la sortie de PHP, mais géré comme un fichier, donc ça reviens a faire un echo

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 187
    Points : 50
    Points
    50
    Par défaut
    comment ca y a bien un moment ou il ecrit les données dans le fichier
    et là quand est-ce qu'il écrase les anciennes écritures?

  16. #16
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par artichaudd Voir le message
    comment ca y a bien un moment ou il ecrit les données dans le fichier
    et là quand est-ce qu'il écrase les anciennes écritures?
    la y'a de fichier coté PHP tout est a la volé

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 187
    Points : 50
    Points
    50
    Par défaut
    bon bah comprends pas plus, je comprend a la volée
    mais il ercrit bien a un moment dans le fichier...?

    bon sinon j'ai une autre question pourquoi avait tu mis ca un peu plus haut :
    Citation Envoyé par stealth35 Voir le message
    fputcsv

    pourquoi ne voulais tu pas que j'ecrive dans un fichier exel
    et pourquoi me conseillais tu plutot du .csv

    encore merci pour ton aide

  18. #18
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    parce que pour ecrire un fichier CSV, c'est pas avec implode mais fgetcsv, le CSV est le format le plus simple a ecrire pour PHP, si tu veux un vrai fichier Excel utilise une libraire

    et le seul fichier écrit c'est quand tu le télécharge mais ça c’est coté client

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 187
    Points : 50
    Points
    50
    Par défaut
    merci
    la quelle me conseilles tu
    PHPExcel
    ou
    Spreadsheet_Excel_Writer en PHP

  20. #20
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par artichaudd Voir le message
    merci
    la quelle me conseilles tu
    PHPExcel
    ou
    Spreadsheet_Excel_Writer en PHP
    aucun du CSV suffit

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [MySQL] Du PHP dans le champ d'une table bdd, possible ?
    Par FrankH dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 21/01/2014, 14h35
  2. [AC-2007] extraire une table en fonction de la date de mise à jour
    Par SG2607 dans le forum VBA Access
    Réponses: 5
    Dernier message: 19/04/2011, 16h04
  3. Copier une table BdD A vers une base de données
    Par Ste20 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 07/10/2007, 20h12
  4. Obtenir champ d'une table BDD Access
    Par hari37 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 04/07/2007, 14h22
  5. extraire une table d'une base sql server 2000
    Par MAJIK_ENIS dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 21/04/2006, 22h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo