[CSV] Exporter un ensemble de données
Bonjour,
Ce topic fait suite a cette discussion (**ICI**) mais le problème est autre
La situation : J'ai 3 table, eleves, matiere et note
Je cherche a exporté les notes des eleves dans un fichiers CSV, en mettant en colonne (ou En-tête) les matières, puis dans la ligne suivante le nom prenom de l'éleve et ces notes.
Je me suis basé pour cela sur la solution donnée par MaitrePylos dans cette discussion (**ICI**).
J'ai bien les matières en colone, et les notes dans la ligne suivante comme vous pouvez le voir dans l'image si-dessous, mais pour un seul éleve, impossible d'avoir la totalité
http://img697.imageshack.us/img697/9595/notet.jpg
Voici mon code
csv.php
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 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 62 63 64 65 66 67 68
| <?php
require ("connect.php");
include('FichierExcel.php');
$i=0;
// Requete pour la selection des ID_eleve
$requete="SELECT id_eleve, nom, prenom FROM eleve ORDER BY id_eleve ";
$resultat = mysql_query ($requete,$connexion);
//Création d'une Table avec tous les ID_eleve
while ( $row = mysql_fetch_object($resultat))
{
$tab_id_eleve[] = $row->id_eleve;
}
// Tab en-tête, juste pour ajouter un élement qui nous servira plutard
$tab_entete = array('Eleve');
// Selection des note pour chaque matière d'un éleve
foreach ($tab_id_eleve as $key=>$id_eleve)
{
$requete="SELECT e.id_eleve, e.nom, e.prenom, m.id_mat, m.nom_mat, m.coef, n.note, n.trimestre FROM eleve e, matiere m, note n
WHERE e.id_eleve=n.eleve_id_eleve AND n.eleve_id_eleve='".$id_eleve."' AND m.id_mat=n.matiere_id_mat AND n.trimestre='1' ORDER BY e.id_eleve";
$resultat = mysql_query ($requete,$connexion);
$lignes = mysql_num_rows ($resultat);
if ($lignes!=0) {
//appel a la class FichierExcel
$fichier = new FichierExcel();
while ($row = mysql_fetch_object($resultat))
{
// Auto incrémentation de $i
$i = $i+1;
// Tab contenant toute les matière
$tab_matiere[] = $row->nom_mat;
// Tab contenant toute les note
$tab_note[] = $row->note;
// Tab contenant le nom prenom de l'éleve
$tab_nom[] = $row->nom." ".$row->prenom;
} // Fin de while ($row
// Si premier passage, mettre les en-tête des colonnes
if ($i="1")
{
// Fusion des deux tableaux Tab_entete et matières pour ajouter "eleve" avant les matière
$tab_temp= array_merge($tab_entete, $tab_matiere);
// ont explose les tableaux pour les préparer a les mettre dans le fichier
$list_mat= implode(";", $tab_temp);
//le resultat de l'explosion se met dans un fichier CSV selon la class FichierExcel
$fichier->Colonne($list_mat);
}// fin de if ($i="1")
// Table nom nous donne a chaque boucle le même nom, nous demandons d'effacé les doublons
$tab_nom = array_unique($tab_nom) ;
// Fusion des deux tableau Tab_nom et note
$tab_temp2= array_merge($tab_nom, $tab_note);
// ont explose les tableau pour les préparé a les mettre dans les fichier
$list_note= implode(";", $tab_temp2);
//le resultat de l'explosion se met dans un fichier CSV selon la class FichierExcel
$fichier->Insertion($list_note);
// on appel le fichier
$fichier->output('NomFichier');
} //Fin de if ($lignes!=0)
}// Fin de foreach ($tab_id_eleve as $key=>$id_eleve)
?> |
FichierExcel.php
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 34 35 36 37 38 39 40 41 42 43
| <?php
class FichierExcel {
private
$csv = Null;
/**
* Cette ligne permet de créer les colonnes du fichers Excel
* Cette fonction est totalement faculative, on peut faire la même chose avec la
* fonction insertion, c'est juste une clarté pour moi
*/
function Colonne($file) {
$this->csv.=$file."\n";
return $this->csv;
}
/**
* Insertion des lignes dans le fichiers Excel, il faut introduire les données sous formes de chaines
* de caractère.
* Attention a séparer avec une virgule.
*/
function Insertion($file){
$this->csv.=$file."\n";
return $this->csv;
}
/**
* fonction de sortie du fichier avec un nom spécifique.
*
*/
function output($NomFichier){
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=$NomFichier.csv");
print $this->csv;
exit;
}
}
?> |
J'espère être clair dans ma demande!!
Merci d'avance pour votre aide