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 :

Mon code ne fonctionne pas (envoi de données vers un fichier csv)


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut Mon code ne fonctionne pas (envoi de données vers un fichier csv)
    Bonjour tout le monde,

    J'ai trouvé ce code pour envoyer mes données vers un fichier .csv

    Le problème est que le fichier s'ouvre mais rien ne s'y écrit.

    Auriez-vous une idée d'où pourrait provenir l'erreur ?

    Voici le code (ce code, je l'ai modifié) :

    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
    <?php
    require_once("csv.lib.php");
    require_once("dbmysql.class.php");
     
    define("DB_NAME", "pharma");
    define("DB_HOST", "localhost");
    define("DB_USER", "root");
    define("DB_PASS", "mdp");
     
    $db = new DbMySQL(DB_HOST, DB_NAME, DB_USER, DB_PASS);
    $db->connect();
     
    $cvs_array = $db->select("SELECT *
    FROM `inscrits_en`
    LEFT JOIN `etudiants` ON ( inscrits_en.MATRICULE_ET = etudiants.MATRICULE_ET )
    WHERE MNEMONIC = '".$_POST['idmnemonics']."' AND TYPE_DE_COURS = '".$_POST['id_types']."' AND CATEGORIE = '".$_POST[	'id_categories']."' ORDER BY NOM_ET, PRENOM_ET");
     
     
    $db2csv = new export2CSV(",","\n");
     
    $csv = $db2csv->create_csv_file($cvs_array);
     
    header("Content-type: application/eml");
    header("Content-Disposition: attachment; filename=mysql_users.csv");
    echo $csv;
     
    ?>
    et voici le code des deux librairies :

    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
    <?php
     
    class export2CSV{
     
        var $delimiter = ",";
        var $row_end = "\n";
     
        function exportDb2CSV($delimiter,$row_end){
            $this->delimiter = $delimiter;
            $this->row_end = $row_end;
        }
     
        function create_csv_file_header($data)
        {
            $row = "";
            if (count($data)>0){
                foreach ($data[0] as $key=>$val)
                {
                    if ($row){
                        $row .= $this->delimiter . $key;
                    }else{
                        $row .= $key;
                    }
                }
                $row .= $this->row_end;
            }
            return $row;
        }
     
     
        function create_csv_file_row($row)
        {
            $res = "";
            foreach ($row as $key=>$val)
            {
                if ($res){
                    $res .= $this->delimiter .'"'. $val.'"';
                }else{
                    $res .= '"'.$val.'"';
                }
            }
            $res .= $this->row_end;
     
            return $res;
        }
     
        function create_csv_file($data)
        {
            $csv = $this->create_csv_file_header($data);
            foreach ($data as $key=>$val){
                $csv .= $this->create_csv_file_row($val);
            }
            return $csv;
        }
    }
    ?>
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    <?php
    class DbMySQL{
        var $host         = '';
        var $login        = '';
        var $pass         = '';
        var $name         = '';
        var $db_link      = null;
        var $error_report = true;
        var $sql          = '';
     
        function DbMySQL($tHost, $tName, $tLogin, $tPass)
        {
            $this->host  = $tHost;
            $this->name  = $tName;
            $this->login = $tLogin;
            $this->pass  = $tPass;
        }
     
        function connect()
        {
            $this->db_link = mysql_connect($this->host, $this->login, $this->pass);
            if ($this->db_link){
                if(mysql_select_db($this->name)){
                    return true;
                }
            }
            return false;
        }
     
        function _query($tSql)
        {
            $this->sql = $tSql;
            $res = mysql_query($tSql, $this->db_link);
            if (mysql_errno($this->db_link)>0){
                $this->show_error();
            }
            return $res;
        }
     
        function select($tSql)
        {
            $result = array();
            $res = $this->_query($tSql, $this->db_link);
     
            if($res){
                while ($row = mysql_fetch_assoc($res)){
                    $result[] = $row;
                }
            }else {
                return false;
            }
     
            return $result;
        }
     
        function select_row($tSql)
        {
            $result = array();
            $res = $this->_query($tSql, $this->db_link);
            if ($res){
                $tmp = mysql_fetch_assoc($res);
                if (is_array($tmp)){
                    $result = $tmp;
                }
            }else{
                return false;
            }
            return $result;
        }
     
        function query($tSql)
        {
            $res = $this->_query($tSql, $this->db_link);
            return $res;
        }
     
        function insert($tSql)
        {
            $res = $this->_query($tSql, $this->db_link);
            $last_insert_id = 0;
            if (mysql_errno($this->db_link)==0){
                $last_insert_id = mysql_insert_id($this->db_link);
            }
            return $last_insert_id;
        }
     
        function close()
        {
            return mysql_close($this->db_link);
        }
     
        function get_last_error()
        {
            return mysql_error($this->db_link);
        }
     
        function error()
        {
            return array(
                        'error' => $this->get_last_error(),
                        'sql'   => $this->sql
                        );
        }
     
        function show_error()
        {
            if ($this->error_report){
                $str = $this->get_last_error();
                echo "Mysql error: [$str] in query: [{$this->sql}]\n";
            }else{
                //echo "While nothing...";
            }
        }
    }
    ?>
    Merci d'avance pour votre aide.

    beegees

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Bonjour,
    Plusieurs remarques :

    1 - n'oublie pas que cette classe (générer csv), est faites pour PHP4, si tu es en PHP5 pense à l'adapter.
    2 - Le séparateur pour Excel en français est le point virgule, et comme certaines option sont définies par défaut, tu n'est pas obliger de les passer en paramètres à nouveau lors de la déclaration

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $db2csv = new export2CSV(";");
    Les entêtes de sortie ne sont pas correcte, essaye ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    header("Content-type: application/vnd.ms-excel");
    en espérant t'avoir aidé.

  3. #3
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Bonjour MaitrePylos,

    Merci pour ta réponse très claire.

    1 - n'oublie pas que cette classe (générer csv), est faites pour PHP4, si tu es en PHP5 pense à l'adapter.
    Comment vois-tu que c'est du PHP 4 ?

    Qu'est-ce que je peux modifier ?

    J'ai appliqué tes changements.

    J'ai d'abord corrigé ma chaine SQL en lui mettant des données brutes, ça me permet de tester :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $cvs_array = $db->select("SELECT *
    FROM `inscrits_en`
    LEFT JOIN `etudiants` ON ( inscrits_en.MATRICULE_ET = etudiants.MATRICULE_ET )
    WHERE MNEMONIC = 'CHIM-J-101' AND TYPE_DE_COURS = 'TH' AND CATEGORIE = 'CI' ORDER BY NOM_ET, PRENOM_ET");
    J'ai ensuite changé le "," par ";" même si cela n'est pas nécessaire (je ne savais pas en fait si je pouvais supprimer cette ligne) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $db2csv = new export2CSV(";","\n");
    J'ai remplacé les en-têtes par ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header("Content-type: application/vnd.ms-excel");
    ça fonctionne déjà mieux, merci.

    J'obtiens quand même deux messages d'Excel que tu peux voir dans les printscreens attachés.

    Encore merci pour ton aide très précieuse.

    beegees

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Ce qui m'embête dans ton premier screen c'est le nom et l'extension de ton fichier qui ne correspond pas avec ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    header("Content-Disposition: attachment; filename=mysql_users.csv");

  5. #5
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Citation Envoyé par MaitrePylos Voir le message
    Ce qui m'embête dans ton premier screen c'est le nom et l'extension de ton fichier qui ne correspond pas avec ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    header("Content-Disposition: attachment; filename=mysql_users.csv");
    Re,

    Merci pour ta réponse.

    J'ai dû changer quelque chose car avant j'avais bien ce nom de fichier :

    mysql_users.csv
    voir attaché

    Maintenant, j'ai :

    export_csv.php.xls
    export_csv.php est le nom de ma feuille php.

    Qu'en penses-tu ?

    Encore merci pour ton aide.

    beegees

  6. #6
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Montre moi tes nouveaux header !

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/01/2009, 16h22
  2. mon code ne fonctionne pas
    Par zakaroh dans le forum C#
    Réponses: 31
    Dernier message: 04/08/2008, 14h19
  3. Mon code ne fonctionne pas mais pourquoi ?
    Par veriecherie dans le forum ASP
    Réponses: 3
    Dernier message: 01/08/2008, 12h19
  4. pourquoi mon code ne fonctionne pas
    Par jmlb35 dans le forum VBA Access
    Réponses: 2
    Dernier message: 30/06/2008, 19h02
  5. [MySQL] Mon code ne fonctionne pas correctement
    Par bebas dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 24/02/2007, 13h27

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