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

Bibliothèques et frameworks PHP Discussion :

[CSV] Exporter un ensemble de données


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de pony99
    Femme Profil pro
    Inscrit en
    Mars 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 161
    Par défaut [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é



    Voici mon code

    csv.php
    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
    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 : 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
    <?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

  2. #2
    Membre confirmé Avatar de pony99
    Femme Profil pro
    Inscrit en
    Mars 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 161
    Par défaut
    J'ai trouvé d'ou venait le problème après avoir bien bidouiller, j'ai fait plusieurs erreur, je donne la solution pour ceux qui le recontrerons peut être

    Erreur N°1 : $fichier = new FichierExcel(); doit se mettre avant la boucle foreach, car si il est a l'intèrieur comme je l'ai fait, a chaque passage il y a un nouvel appel a la fonction, ce qui cré une erreur.

    Erreur N°2 : Dans mon scripte je ne réinitialisé pas les tableau a chaque passage

    Erreur 3 : $fichier->output('NomFichier'); doit se mettre hors boucle foreach

    Voici le code qui fonctionne maintenant :

    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
    62
    63
    64
    65
    66
    67
    68
    69
    <?php
    require ("util.php"); 
    require ("connect.php");
    include('FichierExcel.php');
     
    $i=0;
    $fichier = new FichierExcel(); 	
    // Tab en-tête, juste pour ajouter un élement qui nous servira plutard
    $tab_entete = array('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;
     	}
     
     
     
    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 = ExecRequete ($requete,$connexion);
    $lignes = mysql_num_rows ($resultat);
    if ($lignes!=0) {
     
        $tab_matiere = array();
        $tab_note = array();
        $tab_nom = array();
    	$i = $i+1;
    	while ($row = mysql_fetch_object($resultat))
     
    	{
     
    	$tab_matiere[] = $row->nom_mat;
    	$tab_note[] = $row->note;
    	$tab_nom[] = $row->nom." ".$row->prenom;
    	}
     
    }	   
                  if ($i=="1")
                  {
    	// Fusion des deux tableau Tab_entete et matière
    	$tab_temp= array_merge($tab_entete, $tab_matiere);
    	// ont explose les tableau pour les préparé a les mettre dans les fichier
      $list_mat= implode(";", $tab_temp);
        //le resultat de l'explosion se met dans un fichier CSV selon la class $list_mat
      $fichier->Colonne($list_mat);
      }
     
     
      // Table nom nous donne a chaque boucle le même nom, nous demandons d'effacé les doublon
    	$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);
     
     
     
     
    $fichier->Insertion($list_note);
     
    }
    $fichier->output('NomFichier');
     
    ?>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Magento] Exporter l'ensemble des données Magento vers d'autres canaux de diffusion
    Par alexistnt dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 19/02/2016, 15h48
  2. Exporter un ensemble de données
    Par Invité dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 27/03/2008, 09h48
  3. [CSV] exporter des données d'un fichier CSV vers BD Mysql
    Par samsso2006 dans le forum Langage
    Réponses: 2
    Dernier message: 04/05/2007, 22h25
  4. Moulinette pour export csv d'une base de données
    Par freestyler dans le forum C#
    Réponses: 6
    Dernier message: 16/02/2007, 11h57
  5. Réponses: 6
    Dernier message: 18/07/2006, 20h32

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