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 :

Fonction fputcsv() : équivalent PHP4


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    261
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 261
    Par défaut Fonction fputcsv() : équivalent PHP4
    Un de mes scripts utilise fputcsv(). Mais cette fonction est du PHP 5
    Je dois assurer la compatibilité avec des serveurs offrant du PHP 4
    Existe-t-il un équivalent "approchant" à fputcsv() en PHP 4 ?

    Merci à tous

  2. #2
    Membre éprouvé Avatar de arthak
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 91
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if (!function_exists('fputcsv'))
     include_once("php4.inc.php");
    voila le code de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function fputcsv($fh, $arr)
     {
            $csv = "";
            while (list($key, $val) = each($arr))
             {
                    $val = str_replace('"', '""', $val);
                    $csv .= '"'.$val.'",';
             }
            $csv = substr($csv, 0, -1);
            $csv .= "\n";
            if (!@fwrite($fh, $csv))
             return FALSE;
     }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 58
    Par défaut
    Bonjour,
    J'ai trouvé ce post car j'ai le même problème, mais lorsque je lutilise j'ai des doublons.
    Par exemple voici ma table :

    id nom prenom adresse

    xx xxx xxxxxxx xxxxxxx
    yy yyy yyyyyy yyyyyy

    voici mon fichier CSV crée :

    "xx","xx","xxx","xxx","xxxxxxx","xxxxxxx","xxxxxxx","xxxxxxx",\n"yy","yy","yyy","yyy","yyyyyy","yyyyyy","yyyyyyy","yyyyyyy"\n

    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
    // Connexion au serveur mysql
    $connect = mysql_connect(DB_SERVER, DB_SERVER_USERNAME, 
    	DB_SERVER_PASSWORD) 
        or die('Impossible de se connecter : ' . mysql_error());
    // sélection de la base de données
    mysql_select_db(DB_DATABASE, $connect);
     
     
    function fputcsv($fh, $arr)
     {
            $csv = "";
            while (list($key, $val) = each($arr))
             {
                    $val = str_replace('"', '""', $val);
                    $csv .= '"'.$val.'";';
             }
            $csv = substr($csv, 0, -1);
            $csv .= "\n";
            if (!@fwrite($fh, $csv))
             return FALSE;
     }
     
     
     
    $fichier_export = fopen('file.csv', 'w');
    $sql  = "SELECT * FROM ".DB_TABLE_DL." ";
    $result = mysql_query($sql);
    while ($row = mysql_fetch_array($result)) {
        fputcsv($fichier_export, $row,";");
    }

  4. #4
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ($row = mysql_fetch_row($result)) {
    mysql_fetch_array() te retourne un tableau à double entrée inutile dans la plupart des cas dont celui-ci.

    (c'est plus propre de fermer ton fichier à la fin fclose())

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 58
    Par défaut
    Ok merci.
    Mais que dois-je mettre alors dans la boucle pour connaitre le nombre de lignes?

  6. #6
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Tu peux utiliser directement mysql_num_rows($result) avant ou après ta boucle.
    Et après réflexion il me semble qu'il y a un souci avec cette fonction putcsv(), si tu as par exemple cette chaîne dans un champ :

    zaeaz","zerezr

    tu auras au final :

    "zaeaz"",""zerezr"

    si je me trompe pas ça te fait 2 champs au lieu d'un dans le csv, à vérifier. Je pense qu'il vaudrait mieux utiliser addslashes ce qui donne un truc du style (non testé) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function fputcsv($fh, $arr)
     {
    $arr = array_walk($arr, 'addslashes');
    $csv = '"'.implode('","', $arr).'"\n';
            if (!@fwrite($fh, $csv))
             return FALSE;
     }

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 58
    Par défaut
    Merci,
    Mais dans la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while ($row = mysql_fetch_array($result)) {
        fputcsv($fichier_export, $row,";");
    }
    Si je supprime le while je n'ai plus rien dans ma variable $row.
    Qu'est ce que je dois faire pour obtenir le fichier csv sans les doublons?

    $row doit retourner un tableau à simple entrée, si j'ai bien compris.

  8. #8
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    En fait tu laisses ta boucle tu remplaces juste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $row = mysql_fetch_array($result)
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $row = mysql_fetch_row($result)
    Tu peux faire un var_dump de $row, tu pourras voir ce que je voulais dire par double entrée pour le fetch_array.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 58
    Par défaut
    Super ça marche!!

    sinon j'avais trouvé l'astuce mais c'était du vrai bricolage maison!! :

    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
    function fputcsv($fh, $arr)
     {
            $csv = "";
            $i=0;
    		//while (list($key, $val) = each($arr))
            while (list($key, $val) = each($arr))
             {
                 if ($i==0){ 
                    $val = str_replace('"', '""', $val);
                    $csv .= '"'.$val.'";';
                 $i=1;
                 }else{
                 $i=0;
                 }
     
             }
            $csv = substr($csv, 0, -1);
            $csv .= "\n";
            if (!@fwrite($fh, $csv))
             return FALSE;
     }

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

Discussions similaires

  1. Probleme CR LF avec fonction fputcsv
    Par Franck_P dans le forum Langage
    Réponses: 3
    Dernier message: 05/07/2012, 17h20
  2. Réponses: 3
    Dernier message: 21/06/2012, 16h49
  3. Réponses: 5
    Dernier message: 18/10/2005, 21h53
  4. Tableau d'équivalence des fonctions ?
    Par jennings dans le forum WinDev
    Réponses: 3
    Dernier message: 12/07/2005, 16h03
  5. [String] équivalent de la fonction eval() en javascript
    Par jeyce dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 01/09/2004, 08h42

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