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

Langage PHP Discussion :

Récupéré le resultat d'une requete en CSV selon model


Sujet :

Langage PHP

  1. #1
    Membre du Club 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
    Points : 69
    Points
    69
    Par défaut Récupéré le resultat d'une requete en CSV selon model
    bonsoir,

    J'essai de resoudre depuis quelques heures un casse tête, mais je n'y arrive pas.

    J'aissai de récupéré le resultat d'une requete, il sagit des notes d'eleves pour chaque matière.

    Chaque colone correspondrai a une matière, j'ai réussi a metre les matière en colone, mais je coince pour les notes.

    Voici mon code

    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
    if ($_GET['mode']=="expo")
    {
     
     
    $nom = $_GET['nom'];
    $prenom =$_GET['prenom'];
    $id_eleve =$_GET['id_eleve'];
     
    $fichier ="Résultat de l'élève;".$nom." ".$prenom."\n";
    $fichier .= "\n";
     
    $requete="SELECT e.nom, e.prenom, m.nom_mat, n.note 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) {
     
     
    	while ($row = mysql_fetch_object($resultat))
     
    	{
    		$fichier .=$row->nom_mat.";";
     
    	}
     
    header("Content-type: application/vnd.ms-excel");
    header("Content-disposition: attachment; filename=Personnes.csv");
    print $fichier;
     
     
     }	
    }

  2. #2
    Membre chevronné Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Points : 1 895
    Points
    1 895
    Par défaut
    pourquoi en colonne ?
    ça ne vas pas si c'est en ligne comme ça par exemple ?
    Code x : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    élève;matière;note
    Jean;français;3.5
    Florinne;mathématiques;17
    GNAP !

  3. #3
    Membre du Club 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
    Points : 69
    Points
    69
    Par défaut
    Bonsoir nosferapti

    En colonne, parce que les personne qui vont utilisé le fichier m'ont demandé qu'il soit en colonne.

    L'exportation en ligne est facile, mais ils n'en veulent pas, car cela signifie que c'est a eux de le mettre en colonne pour pouvoir les traités

  4. #4
    Membre actif Avatar de speedy_g
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 213
    Points : 242
    Points
    242
    Par défaut
    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
     
    $current = "";
    $fichier = "";
    $tmp = array();
    while($row = $results->fetch->obj())
    {
     
      if($row->eleve != $current)
       { 
              $fichier .="\n ;".implode(";",$tmp)."\n"; // passe a la ligne
               $current = $row->eleve;
               $fichier .= $current.";";
       }  
       else
      {
                       $tmp[] = $row->note;
     
       }
     
        $fichier .= $row->matiere
     
    }
    Un truc du genre devrait ( a débugger) te mettre les matieres en colonne, les notes
    se trouvant a la ligne qui suit. C'est un essai d'1 heure du mat ,

    L'affichage serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Eleve 1 matA matB matC
                  9     8     4
    Eleve 2  matA matB matC
                  5      9      9

  5. #5
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    Comme celà en une requête, je pense pas

    Il faut déjà te mettre en tête la forme de ton fichier ....
    D'après ce que j'ai compris, c:
    nom | prénom | matière1 | matière2 | etc

    Première étape, les entêtes de colonnes:
    En dur nom, prénom (les labels), puis une requête de toutes les matières possibles. => fputcsv d'une première ligne
    Dans un tableau, toutes les matières, pour avoir un indice qui donnera pour chaque matière un numéro de colonne (celà servira pour la deuxième étape)

    Deuxième étape, les données:
    Ta requête que j'ai pas vérifié mais qui doit donner les infos pour un 1 éléve avec sa matière et sa note.
    Pour chaque ligne ou objet de ta requête, nous avons donc le nom et le prénom, puis une matière. Cette matière sera recherché dans le tableau de la première étape pour savoir à laquelle des colonnes elle se situe (ex la 4 pour math, avec 0= Nom, 1=Prénom). Enfin c plus qu'une question d'affichage avec des cellules vides pour compléter la ligne du fputcsv

    Voilà,
    ça me parait pas compliquer à faire
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  6. #6
    Membre du Club 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
    Points : 69
    Points
    69
    Par défaut
    @ speedy_g
    Merci pour ta réponse de 1h du mat mais c'est vrais que la fonction fputcsv est plus plaisante.

    @ Fench
    Je suis débutant en PHP, donc ce qui parait simple, l'ai pas forcément pour moi , d'où ma question dans le forum débutant

    Je ne connaissais pas la fonction fputcsv, en regardant sur internet et en la testant, c'est sûrement la solution la plus adéquate.

    Seulement en la testant avec le code suivant j'ai des ligne et non des colonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $list = array ('Math','physique', 'SNV');
    $fp = fopen('file.csv', 'w');
     
    foreach ($list as $column) {
        fputcsv($fp, explode(';', $column));
    }
     
    fclose($fp);
     
    Résultat
     
    Math
    physique
    SNV
    En plus j'essaie d'appliquer ce que tu dis, mais je ne comprends pas très bien.
    Peux-tu donné un exemple STP

    Merci de votre aide

  7. #7
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Je continue ton début de code sur ton idée (je garde strictement ton idée parceque je n'aurais pas fait comme celà, mais c pas grave).

    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
     
    $list = array ('Nom', 'Prénom',  'Math', 'physique', 'SNV');
    $fp = fopen('file.csv', 'w');
     
    // 1er étape l'entête:
        fputcsv($fp, $list);
     
    // 2ème : le reste
    // Ta requête qui donne $nom, $prenom, $matiere, $note (par ex)
    // Construction de la future ligne $ligne
    $ligne[0]=$nom
    $ligne[1]=$prenom
    // Problème de la note, nous supposons 3 matière
    // Si des maths alors la note doit aller en $ligne[2] et $ligne[3]et4 seront null
    // Si de la physique alors la note doit aller en $ligne[3] et $ligne[2]et4 seront null
    // Etc, etc (à automatiser si plus de matière)
    }
    fputcsv($fp, $ligne); 
    fclose($fp);
    Voilà un début d'algorithme pour t'aider
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  8. #8
    Membre du Club 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
    Points : 69
    Points
    69
    Par défaut
    Salut Fench,

    En fait je viens de comprendre (que maintenant, malheureusement) que c'est a celui qui récupère le fichier CSV qui doit convertir les chaîne de caractère en colonne.

    J'ai trouvé cette solution pour que cela se face automatiquement (ICI)

    Mais comme je suis curieux, j'aimerai savoir comment tu aurai fait

    En tout cas merci bcp pour ton aide

  9. #9
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Ouais donc c le contraire ...

    Utilises fgetcsv ligne à ligne dans un tableau ET chaque indice du tableau sera une colonne voili, voilà
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  10. #10
    Membre du Club 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
    Points : 69
    Points
    69
    Par défaut
    Pas compris

    Voici mon code avec fputcsv

    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
     if ($lignes!=0) 
     {
     
          while ($row = mysql_fetch_object($resultat))
          {
          $tab_matiere[] = $row->nom_mat;
          $tab_note[] = $row->note;
          }
          $fp = fopen('file.csv', 'w');
          // 1er étape l'entête:
          fputcsv($fp, $tab_matiere);
     
          foreach ($tab_note as $key=>$note)
          {
          $ligne[$key]=$note;
          }
          fputcsv($fp, $ligne); 
          fclose($fp);
    }
    Je ne trouve pas comment utilisé fgetcsv

  11. #11
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Désolé, je me suis exténué sur le post de 'developpez' et j'ai plus aucunes idées

    Je te parlais du getcsv pour lire du CSV à mettre dans ta base MAIS je crois que c pas du tout celà ton pb.

    Pour le dernier code que tu as mis, ça donne quoi ? et tu veux quoi ?
    Je vais essayé de t'aider
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  12. #12
    Membre du Club 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
    Points : 69
    Points
    69
    Par défaut
    Je pense que je vais me contenté de cette solution (ICI)

    Merci en tous cas de ton aide

  13. #13
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 563
    Points : 2 390
    Points
    2 390
    Par défaut
    Tu peux aussi le faire directement dans ta requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $requete="SELECT CONCAT_WS(';', e.nom, e.prenom, m.nom_mat, n.note) as ligne 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";
    Zend Certified PHP Engineer

    « Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana

  14. #14
    Membre du Club 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
    Points : 69
    Points
    69
    Par défaut
    Citation Envoyé par Seb33300 Voir le message
    Tu peux aussi le faire directement dans ta requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $requete="SELECT CONCAT_WS(';', e.nom, e.prenom, m.nom_mat, n.note) as ligne 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";
    Je viens de me documeté sur le fonction CONCAT_WS, je testerais peu être.

    Merci en tous cas

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

Discussions similaires

  1. expoprter le resultat d une requete en csv
    Par neuneu1 dans le forum Bases de données
    Réponses: 2
    Dernier message: 02/06/2008, 11h18
  2. resultat d'une requete dans un fichier csv
    Par PAYASS59 dans le forum Requêtes
    Réponses: 1
    Dernier message: 21/09/2005, 21h14
  3. Réponses: 2
    Dernier message: 29/11/2004, 12h13
  4. Syntaxe pour avoir un seul resultat dans une requete
    Par Pompil dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/09/2003, 15h51
  5. [VB6] [Excel] Résultat d'une requete ds une feuille
    Par elifqaoui dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 07/01/2003, 17h52

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