PageRenderTime 39ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/export/csvexport.php

https://bitbucket.org/mw4rf/ajpsc-annuaire
PHP | 124 lines | 68 code | 21 blank | 35 comment | 16 complexity | 254799514a4e48fbcb67168e4672718f MD5 | raw file
  1. <?php
  2. // Annuaire Alumnii
  3. // Base de données et annuaire d'anciens étudiants.
  4. // Copyright (C) <2006> <Guillaume Florimond>
  5. // This program is free software: you can redistribute it and/or modify
  6. // it under the terms of the GNU General Public License as published by
  7. // the Free Software Foundation, either version 3 of the License, or
  8. // (at your option) any later version.
  9. // This program is distributed in the hope that it will be useful,
  10. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. // GNU General Public License for more details.
  13. // You should have received a copy of the GNU General Public License
  14. // along with this program. If not, see <https://www.gnu.org/licenses/>.
  15. session_start();
  16. include('../includes/config.inc.php');
  17. include('../includes/fonctions.inc.php');
  18. /* Début: authentification */
  19. if(checkauth())
  20. {
  21. // S'il y a une requête en mémoire correspondant à un résultat de recherche...
  22. if(isset($_SESSION["exportation_permission"]) and $_SESSION["exportation_permission"] == true)
  23. {
  24. // Premier cas: l'exportation de tout le contenu est permise
  25. if($_config['exporter_tout'] == 1)
  26. {
  27. $sql = $_SESSION["exportation_requete"];
  28. }
  29. // Deuxième cas: l'exportation du tout n'est pas permise
  30. else
  31. {
  32. $sql = $_SESSION["exportation_requete"];
  33. // On récupère la requête et on remplace le "SELECT *" par autre chose
  34. $requete = explode("*", $sql, 2);
  35. $sql = "SELECT nom, prenom, promotion, email ".$requete[1];
  36. }
  37. }
  38. // Si on demande EXPRESSEMENT de tout exporter ou d'exporter une partie seulement
  39. if(isset($_GET['tout']))
  40. {
  41. // On exporte tout
  42. if($_GET['tout'] == 1 and $_config['exporter_tout'] == 1)
  43. {
  44. $sql = "SELECT nom, prenom, promotion, nationalite, naissance, email, q1, q2, q3, q4, q5, q6, q7 FROM utilisateur;";
  45. }
  46. // On exporte une partie (exportation rapide)
  47. elseif($_GET['tout'] == 0)
  48. {
  49. $sql = "SELECT nom, prenom, promotion, email FROM utilisateur;";
  50. }
  51. // A défaut, on exporte seulement une partie (=> si $_config['exporter_tout'] != 1)
  52. else
  53. {
  54. $sql = "SELECT nom, prenom, promotion, email FROM utilisateur;";
  55. }
  56. }
  57. connexion();
  58. $export = mysql_query($sql);
  59. $fields = mysql_num_fields($export);
  60. /* Extraction du titre des colonnes */
  61. for ($i = 0; $i < $fields; $i++)
  62. { $header .= mysql_field_name($export, $i) . ";";
  63. }
  64. /* Extraction du contenu des colonnes */
  65. while($row = mysql_fetch_row($export))
  66. { $line = '';
  67. foreach($row as $value) // pour parcourir le tableau
  68. { if ((!isset($value)) OR ($value == ""))
  69. { $value = ";"; }
  70. else
  71. { $value = str_replace('"', '""', $value);
  72. $value = '"' . $value . '"' . ";";
  73. // Enlever les slashes
  74. $value = stripslashes($value);
  75. // Enlever les tags HTML
  76. $value = strip_tags($value);
  77. }
  78. $line .= $value;
  79. }
  80. $data .= trim($line)."\n";
  81. }
  82. /* $data contient toute la base de donnée */
  83. $data = str_replace("\r","",$data);
  84. /* Prévenir l'utilisateur s'il n'y a aucune entrée dans la BDD */
  85. if ($data == "") {
  86. $data = "\n Aucune entrée dans la base de données.\n";
  87. }
  88. /* IMPORTANT
  89. * Malheureusement, MS Excel 2004 pour Mac n'est pas parfait... Il n'arrive pas à ouvrir le fichier de sortie avec l'encodage correct. Les caractères français sont mal interprétés, que l'encodage soit Latin1 ou UTF-8. Il n'y a aucune solution à cela. Il faudra utiliser une version PC ou attendre que Microsoft se réveille...*/
  90. // Encoder le tout en UTF-8
  91. //utf8_encode($data);
  92. /* Récupérer la date du jour pour former le nom du fichier téléchargé */
  93. $date = date("Ymd");
  94. /* Définition des header() PHP: le navigateur affiche un dialog de sauvegarde, mais pas cette page*/
  95. header("Content-Type: application/csv-tab-delimited-table; charset=UTF-8");
  96. header("Content-Disposition: attachment; filename=ajpsc_annuaire_".$date.".csv");
  97. header("Content-Encoding:UTF-8");
  98. header("Pragma: no-cache");
  99. header("Expires: 0");
  100. print "$header\n$data";
  101. } else { echo "Erreur";}
  102. /* Fin authentification */
  103. ?>