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 :

Ecriture d'un fichier CSV : pas de sauts de ligne


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Points : 134
    Points
    134
    Par défaut Ecriture d'un fichier CSV : pas de sauts de ligne
    Bonjour je rencontre le même problème que ce sujet : Saut de ligne dans fichier CSV.

    J'obtiens ce résultat....

    Nom : Capturebis.PNG
Affichages : 139
Taille : 1,9 Ko

    Alors que je souhaite avoir les chiffres en fonction des réponses. Car cela correspond à la réponse à un numéro de question dans ma table mysql.

    Voila mon code qui exécute ce script.

    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
    <?php
     
    //on exporte la table sous forme d'un tableau
    mysqli_report(MYSQLI_REPORT_STRICT); // activation des erreurs par exceptions
     
    $montable = array();
    $query = "SELECT Rep, IdQ FROM reponse where IdQuest=?";
    try {
       $stmt = $database -> prepare($query);
       $stmt -> bind_param("d", $idquest);
       $stmt -> execute();
       $stmt -> bind_result($rep, $id);
     
     
    while($stmt->fetch()) {
          // $rep se remplit d'une donnée à chaque tour
     
        echo  $id.";"; 
        echo "\r";  
        $montable[] = $rep;
       }
       $stmt -> close();
    }
    catch(mysqli_sql_exception $ex) {
       $montable = array('Erreur SQL ' . $ex->getCode(), $ex->getMessage());
    }
     
    // on formate le fichier CSV
    ob_start(); // buffer pour intercepter l'affichage
    $fp = fopen('php://output', 'w'); // "fichier" affichage, se comporte comme un echo de son contenu
    fputcsv($fp, $montable, ';'); // génération du contenu du CSV $montable
    fclose($fp);
    $len = ob_get_length(); // mesure du buffer en octets, pour les en-têtes
     
    $datestamp = date("Y-m-d");
    $filename = $datestamp."_table.csv";  
     
    // on insère les en-têtes Excel
    header("Content-Disposition: attachment; filename=$filename");
    header("Content-Type: application/vnd.ms-excel");
    header("Content-Length: $len"); // taille en octets
     
    // et on exporte le fichier
    ob_end_flush(); // on vide le buffer vers le client pour qu'il réceptionne
     
    ?>
    Merci d'avance

  2. #2
    Membre habitué
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Points : 134
    Points
    134
    Par défaut
    Grâce à des conseils avisés. J'ai un peu avancé sur le code, l'idée est de mettre tout dans un tableau,c'est à dire le IdQ et la Reponse (Rep).

    Pour ensuite avec fputcsv() mettre le tableau complet en format CSV.

    Malheureusement l'affichage du tableau est vide alors que les paramètres $IdQuest sont corrects. Vous-avez des pistes pour expliquer cette erreur?

    Merci


    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
    $montable = array();
    $query = "SELECT Rep, IdQ FROM reponse where IdQuest=?";
    try {
       $stmt = $database -> prepare($query);
       $stmt -> bind_param("d", $idquest);
       $stmt -> execute();
       $stmt -> bind_result($rep, $id);
       $result = $stmt->result_metadata();
     
     
       while($row = $result->fetch_assoc()) {
          if(empty($montable)) $montable[] = array_keys($row); // ajout d'une ligne de titres
          $montable[] = $row;
       }
       $stmt -> close();
    }
    catch(mysqli_sql_exception $ex) {
       $montable = array('Erreur SQL ' . $ex->getCode(), $ex->getMessage());
    }
     
     
    var_dump($montable);

  3. #3
    Membre habitué
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Points : 134
    Points
    134
    Par défaut
    Bonjour,

    Je relance ce sujet. Alors j'ai cherché du côté de ma requête sql qui renvoyée une erreur dans la console de test de php my admin.
    J'ai réussie à corriger l'erreur. Je peux mettre de côté le problème de la requête mais je reviens sur mon code du coup.

    Est-ce que vous constatez une incohérence?

    Mon 1er code sert à récupérer (le numéro du questionnaire) IdQuest.

    Le deuxième à afficher un tableau en csv avec les réponses aux questions pour un IdQuest.

    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
    <?php
     
    //Affiche la variable selectionnée par l'utilisateur dans  liste deroulante sur la page résultat
     
    $query = "SELECT IdQuest FROM questionnaire WHERE TitQuest=?";
    $stmt = $database -> prepare($query);
    $stmt -> bind_param("s", $_POST["mydropdown"]);
    $stmt -> execute();
    $stmt -> bind_result($idquest);
    $stmt -> fetch();
    $stmt -> close();
     
    ?>
     
    <?php
     
     
    //on exporte la table sous forme d'un tableau
    mysqli_report(MYSQLI_REPORT_STRICT); // activation des erreurs par exceptions
     
    $montable = array();
    $query = "SELECT Rep, IdQ FROM reponse where IdQuest = ?"; //SELECT Rep, IdQ FROM `reponse` where IdQuest like 2
                                                                 //SELECT Rep, IdQ FROM reponse where IdQuest=?
    try {
       $stmt = $database -> prepare($query);
       $stmt -> bind_param("d", $idquest);
       $stmt -> execute();
       $stmt -> bind_result($rep, $id);
       $result = $stmt->result_metadata();
     
     
       while($row = $result->fetch_assoc()) {
          if(empty($montable)) $montable[] = array_keys($row); // ajout d'une ligne de titres
          $montable[] = $row;
       }
       $stmt -> close();
    }
    catch(mysqli_sql_exception $ex) {
       $montable = array('Erreur SQL ' . $ex->getCode(), $ex->getMessage());
    }
     
     
    //var_dump($result);
     
     
     
    // on formate le fichier CSV
    ob_start(); // buffer pour intercepter l'affichage
    $fp = fopen('php://output', 'w'); // "fichier" affichage, se comporte comme un echo de son contenu
    fputcsv($fp, $montable, ';'); // génération du contenu du CSV $montable
    fclose($fp);
    $len = ob_get_length(); // mesure du buffer en octets, pour les en-têtes
     
    $datestamp = date("Y-m-d");
    $filename = $datestamp."_table.csv";  
     
    // on insère les en-têtes Excel
    header('Content-type: text/csv; charset=UTF-8');
    header("Content-Disposition: attachment; filename=$filename");
    header("Content-Type: application/vnd.ms-excel");
    header("Content-Length: $len"); // taille en octets
     
    // et on exporte le fichier
    ob_end_flush(); // on vide le buffer vers le client pour qu'il réceptionne
     
    ?>

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    amateur
    Inscrit en
    Mars 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Mars 2014
    Messages : 28
    Points : 26
    Points
    26
    Par défaut
    Salut,

    ton code me parait propre, tu pourrais tester le contenu du tableau pour situer l'erreur? un petit print_r et je suis sur que tu vas trouvé directement.

  5. #5
    Membre habitué
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Points : 134
    Points
    134
    Par défaut
    Bonjour,

    Merci de ta réponse shoooryuken.

    Alors je fais un J'affiche un magnifique Array ( ) .

    Franchement je ne comprends pas ce qui se passe !! PHP se moque de moi

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    Bonjour,

    essayez :
    Christophe

    Pensez à mettre quand c'est le cas.

  7. #7
    Membre habitué
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Points : 134
    Points
    134
    Par défaut
    Hello,

    Merci Christophe P. pour ta réponse.

    Avec array(0) { }


  8. #8
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    Le tableau est vide, donc la requête ne retourne rien.
    Christophe

    Pensez à mettre quand c'est le cas.

  9. #9
    Membre habitué
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Points : 134
    Points
    134
    Par défaut
    Oui je comprends que ma boucle n'affiche rien.

    Mais je ne sais pas pourquoi elle ne renvoie pas de valeur

    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
    try {
       $database = new mysqli("localhost", "root", "", "bdrprojet");
       $database->set_charset('utf8');
       $stmt = $database -> prepare('SELECT Rep, IdQ FROM reponse WHERE IdQuest = ?');
       $stmt -> bind_param("d", $idquest);
       $stmt -> execute();
       $result = $stmt->result_metadata();
     
    //la boucle ne renvoie aucune valeur
     
       while($row = $result->fetch_assoc()) {
          if(empty($montable)) $montable[] = array_keys($row); // ajout d'une ligne de titres
          $montable[] = $row;
        }
       $stmt -> close();
    }
    catch(mysqli_sql_exception $ex) {
       $montable = array('Erreur SQL ' . $ex->getCode(), $ex->getMessage());
    }

  10. #10
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    Que donne la requête quand elle est lancée directement dans MySQL ?
    Avez-vous affiché la valeur de $idquest afin de la vérifier ?
    Christophe

    Pensez à mettre quand c'est le cas.

  11. #11
    Membre habitué
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Points : 134
    Points
    134
    Par défaut
    Oui j'ai testé cette solution

    La requête dans la console SQL de phpmyadmin fonctionne parfaitement.

    Et $idquest renvoi une valeur correcte.

  12. #12
    Membre habitué
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Points : 134
    Points
    134
    Par défaut
    Sujet résolu.

    Je n'arrivais pas à trouver la solution avec ce code. Du coup j'ai changé pour un autre tutoriel.

    Voila ça fonctionne.

    Leçon a retenir parfois vaut mieux lâcher un code qui ne fonctionne pas que perdre son temps et ses nerfs!!

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

Discussions similaires

  1. Creation/Ecriture dans un fichier .CSV
    Par RodolpheHTL dans le forum C#
    Réponses: 2
    Dernier message: 28/10/2011, 00h53
  2. Ecriture dans les fichiers csv
    Par nicogigo dans le forum Général Python
    Réponses: 4
    Dernier message: 17/03/2010, 16h38
  3. [AC-2003] fin fichier csv: pas de ;
    Par schwarzy2 dans le forum VBA Access
    Réponses: 8
    Dernier message: 16/04/2009, 16h29
  4. Ecriture dans un fichier csv
    Par Herveg dans le forum PL/SQL
    Réponses: 1
    Dernier message: 25/11/2008, 17h01
  5. Réponses: 3
    Dernier message: 11/06/2007, 11h20

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