Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/11/2011, 12h01   #1
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 136
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 136
Points : 14
Points : 14
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
artichaudd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 12h25   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 032
Points : 5 032
Hello

Utilise du CSV pour faire ça:
Code :
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);
}
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 13h44   #3
Nouveau Membre du Club
 
Inscription : juin 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 33
Points : 28
Points : 28
Cette solution fonctionne, je voulais apporter une autre solution qui est peut être plus simple et qui se fait via une requete Mysql :

Code :
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"
tMSun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 13h53   #4
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Utilise phpExcel ou pour en savoir plus
__________________
Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 13h56   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 138
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 138
Points : 8 502
Points : 8 502
Citation:
Envoyé par Benjamin Delespierre Voir le message
Hello

Utilise du CSV pour faire ça:
Code :
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

__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 14h46   #6
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 032
Points : 5 032
Citation:
Envoyé par stealth35 Voir le message
fputcsv

J'oublie à chaque fois.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 14h59   #7
Modérateur
 
Inscription : septembre 2010
Messages : 7 138
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 138
Points : 8 502
Points : 8 502
si tu veux utiliser l'output tu peux faire

Code :
1
2
3
4
5
$handle = fopen('php://output', 'ab');
foreach ($statement as $row) {
    fputcsv($handle, $row, ';');
}
fclose($handle)
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/11/2011, 12h53   #8
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

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

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
Citation:
Envoyé par stealth35 Voir le message
si tu veux utiliser l'output tu peux faire

Code :
1
2
3
4
5
$handle = fopen('php://output', 'ab');
foreach ($statement as $row) {
    fputcsv($handle, $row, ';');
}
fclose($handle)
classe +10.
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 15h53   #9
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 136
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 136
Points : 14
Points : 14
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 :
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 -------------------
 
?>
artichaudd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 15h55   #10
Modérateur
 
Inscription : septembre 2010
Messages : 7 138
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 138
Points : 8 502
Points : 8 502
closeCursor sert uniquement si tu ne récupère pas tout les résultats

sinon ça sert a rien ça :

Code :
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 :
fputcsv($fichier, $donnees);
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/11/2011, 17h12   #11
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 136
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 136
Points : 14
Points : 14
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
artichaudd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 17h13   #12
Modérateur
 
Inscription : septembre 2010
Messages : 7 138
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 138
Points : 8 502
Points : 8 502
http://php.net/manual/en/pdostatement.fetch.php

mais il suffisait juste de relire nos exemples
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/11/2011, 17h55   #13
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 136
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 136
Points : 14
Points : 14
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
artichaudd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 17h58   #14
Modérateur
 
Inscription : septembre 2010
Messages : 7 138
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 138
Points : 8 502
Points : 8 502
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
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 18h22   #15
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 136
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 136
Points : 14
Points : 14
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?
artichaudd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 18h30   #16
Modérateur
 
Inscription : septembre 2010
Messages : 7 138
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 138
Points : 8 502
Points : 8 502
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é
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 18h36   #17
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 136
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 136
Points : 14
Points : 14
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
artichaudd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 18h40   #18
Modérateur
 
Inscription : septembre 2010
Messages : 7 138
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 138
Points : 8 502
Points : 8 502
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
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 10h27   #19
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 136
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 136
Points : 14
Points : 14
merci
la quelle me conseilles tu
PHPExcel
ou
Spreadsheet_Excel_Writer en PHP
artichaudd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 10h29   #20
Modérateur
 
Inscription : septembre 2010
Messages : 7 138
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 138
Points : 8 502
Points : 8 502
Citation:
Envoyé par artichaudd Voir le message
merci
la quelle me conseilles tu
PHPExcel
ou
Spreadsheet_Excel_Writer en PHP
aucun du CSV suffit
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h48.


 
 
 
 
Partenaires

Hébergement Web