bonjour comment faire pour exporter des données Mysql sous forme CSV en PHP5 selon l'architecture MVC ? dans le Controlleur qu'est ce que j'écris ? et comment je fais l'appel pour que le fichier soit généré?
bonjour comment faire pour exporter des données Mysql sous forme CSV en PHP5 selon l'architecture MVC ? dans le Controlleur qu'est ce que j'écris ? et comment je fais l'appel pour que le fichier soit généré?
Exemple d'un script qui exporte un compteur de visites mysql en proposant un téléchargement de fichier au format csv :
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 require('fonctions.php'); //contient la connexion $date = date("y-m-d-H-i-s"); $fichier_de_sauvegarde = 'Compteur_Visites-'.$date.'.csv'; $sav = filter_input(INPUT_GET, 'sav', FILTER_VALIDATE_INT); if ($sav == 1) { $handle = tmpfile(); $info = stream_get_meta_data($handle); if($handle) { try { $ressource = \C_PDO::getC()->prepare("SELECT * FROM compteur_visiteurs"); $ressource->execute(); // PDO::FETCH_ASSOC pour récupérer le nom des colonnes avec array_keys $first_line = $ressource->fetch(\PDO::FETCH_ASSOC); // Pour indiquer les colonnes avec la première lettre en majuscule $colonnes = array_map('ucfirst',array_keys($first_line)); fputcsv($handle, $colonnes, ';'); // Première ligne de données fputcsv($handle, $first_line, ';'); while ($line = $ressource->fetch(\PDO::FETCH_NUM)) { fputcsv($handle, $line, ';');// notation française avec le point virgule } $ressource->closeCursor(); } catch(\PDOException $e) { fclose($handle); exit("Erreur de sauvegarde du compteur. Avertir l'administrateur si le problème persiste"); } } $filesize = filesize($info['uri']); header("Content-Type: application/force-download; name=\"".$fichier_de_sauvegarde."\""); header("Content-Transfer-Encoding: text/csv"); header("Content-Length: ".$filesize); header("Content-Disposition: attachment; filename=\"".$fichier_de_sauvegarde."\""); header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, public"); header("Pragma: no-cache"); header("Expires: 0"); rewind($handle); fpassthru($handle); fclose($handle); exit; }
D'accord merci bien ,ça marche, ça me donne un fichier Excel c'est vrai, mais il y est affiché des messages d'erreurs comme suit :
sachant que j'ai écrit tous ça dans une fonction Outcsv() au niveau du modéle et au niveau du controleur j'ai écrit une autre fonction<br />
<b>Notice</b>: Undefined variable: info in <b>C:\xampp\htdocs\Test\models\disque.php</b> on line <b>164</b><br />
<br />
<b>Notice</b>: Undefined variable: handle in <b>C:\xampp\htdocs\Test\models\disque.php</b> on line <b>172</b><br />
<br />
<b>Warning</b>: rewind() expects parameter 1 to be resource, null given in <b>C:\xampp\htdocs\Test\models\disque.php</b> on line <b>172</b><br />
<br />
<b>Notice</b>: Undefined variable: handle in <b>C:\xampp\htdocs\Test\models\disque.php</b> on line <b>173</b><br />
<br />
<b>Warning</b>: fpassthru() expects parameter 1 to be resource, null given in <b>C:\xampp\htdocs\Test\models\disque.php</b> on line <b>173</b><br />
<br />
<b>Notice</b>: Undefined variable: handle in <b>C:\xampp\htdocs\Test\models\disque.php</b> on line <b>174</b><br />
<br />
<b>Warning</b>: fclose() expects parameter 1 to be resource, null given in <b>C:\xampp\htdocs\Test\models\disque.php</b> on line <b>174</b><br />
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 au niveau Controleur : function generatecsv(){ $this->layout = 'layout'; $this->loadModel('disque'); $dis = new Disque(); $disque = $dis->OutCSV(); echo jason_encode(0); exit; }
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 au niveau Model: function OutCSV() { $cnx = new Connection(); $date = date("y-m-d H:i:s"); $fichier_de_sauvegarde = 'Test '.$date.'.csv'; $sav = filter_input(INPUT_GET, 'sav', FILTER_VALIDATE_INT); if ($sav == 1) { $handle = tmpfile(); $info = stream_get_meta_data($handle); if($handle) try { $ressource = \C_PDO::getC()->prepare("SELECT * FROM disque"); // $stmt =$cnx->getDB()->query("SELECT * FROM disque"); $ressource->execute(); $first_line = $ressource->fetch(\PDO::FETCH_ASSOC);// PDO::FETCH_ASSOC pour récupérer le nom des colonnes avec array_keys // Pour indiquer les colonnes avec la première lettre en majuscule $colonnes = array_map('ucfirst',array_keys($first_line)); // Pour indiquer les colonnes avec la première lettre en majuscule fputcsv($handle, $colonnes, ';'); // Première ligne de données fputcsv($handle, $first_line, ';'); while ($line = $ressource->fetch(\PDO::FETCH_NUM)) { fputcsv($handle, $line, ';');// notation française avec le point virgule } $ressource->closeCursor(); } catch(\PDOException $e) { fclose($handle); exit("Erreur de sauvegarde du compteur. Avertir l'administrateur si le problème persiste"); } } $filesize = filesize($info['uri']); header("Content-Type: application/force-download; name=\"".$fichier_de_sauvegarde."\""); header("Content-Transfer-Encoding: text/csv"); header("Content-Length: ".$filesize); header("Content-Disposition: attachment; filename=\"".$fichier_de_sauvegarde."\""); header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, public"); header("Pragma: no-cache"); header("Expires: 0"); rewind($handle); fpassthru($handle); fclose($handle); exit; }
les variables handle et infos sont inconnus pour lui , je les déclare ou quoi!
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager