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 :

[CSV] Proposer le téléchargement d'un fichier


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2008
    Messages : 60
    Points : 50
    Points
    50
    Par défaut [CSV] Proposer le téléchargement d'un fichier
    Bonjour,

    J'ai essayé le code indiqué dans la FAQ, mais j'ai du mal l'essayer car mon fichier .csv apparait directement dans ma page en texte et je n'ai pas la boite de dialogue de téléchargement.
    http://php.developpez.com/faq/?page=..._forcedownload

    J'ai du coup repris un vieux fichier qui lui fonctionnait et qui ne me semblait pas bien différent.

    Alors je ne sais pas trop ...
    j'ai utilisé votre code en le mettant dans une fonction que j'appelle depuis la page où je génère mon fichier en passant son nom en paramètre.

    Par contre, le fichier que j'utilise, lui, contient ça au début :

    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
    <?php 
     
    // on essaie de reconnaitre l'extension pour que le téléchargement corresponde au type de fichier afin d'éviter les erreurs de corruptions 
     
    $fich=$_REQUEST["Fichier_a_telecharger"];
    $chem=$_REQUEST["chemin"];
    switch(strrchr(basename($_REQUEST["Fichier_a_telecharger"]), ".")){
     
    case ".gz": $type = "application/x-gzip"; break;
    case ".tgz": $type = "application/x-gzip"; break;
    case ".zip": $type = "application/zip"; break;
    case ".pdf": $type = "application/pdf"; break;
    case ".png": $type = "image/png"; break;
    case ".gif": $type = "image/gif"; break;
    case ".jpg": $type = "image/jpeg"; break;
    case ".txt": $type = "text/plain"; break;
    case ".htm": $type = "text/html"; break;
    case ".html": $type = "text/html"; break;
    case ".txt": $type = "text/html"; break;
    default: $type = "application/octet-stream"; break;
     
    }
     
    header("Content-disposition: attachment; filename=$fich"); 
    header("Content-Type: application/force-download"); 
    header("Content-Transfer-Encoding: $type\n"); // Surtout ne pas enlever le \n
    header("Content-Length: ".filesize($chem . $fich)); 
    header("Pragma: no-cache"); 
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public"); 
    header("Expires: 0"); 
    readfile($chem . $fich); 
    ?>
    et ensuite c'est de l'html classique et sans contenu sauf le titre

    et il est appelé par un lien du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="telecharge.php?Fichier_a_telecharger=nomFichier"&chemin=nomDossier
    Peut-être est-ce ce qu'il fallait faire aussi avec votre code, mais, en ce cas, peut-être faudrait-il l'indiquer en haut de votre FAQ, car ce n'est pas évident alors.

    Voilà, si ça peut vous servir ...

  2. #2
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut virgrennes

    Je me permets de te faire remarquer que ton exemple crée la variable $type mais qu'il ne l'utilise pas. Le "switch" ne sert donc à rien. En outre, tu ne protèges pas tes variables dans $_REQUEST, ce qui rend ton script vulnérable à la dangereuse faille d'injection de headers.

    Puisque ton exemple et celui de la FAQ utilisent essentiellement la même technique, je te recommande d'utiliser la version de la FAQ, qui est sécurisée.

  3. #3
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2008
    Messages : 60
    Points : 50
    Points
    50
    Par défaut
    Bonjour,
    pour la variable $type, elle est utilisée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header("Content-Transfer-Encoding: $type\n");
    mal, je vous l'accorde, mais elle l'est
    la correction devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header("Content-Transfer-Encoding: ".$type."\n");
    pour la protection des variables, je me renseignerai car je ne vois pas de quoi il en retourne... A moins que vous ayez le temps de m'éclairer...

    Enfin, pour mon post, je crois que comme d'habitude, j'ai voulu trop en dire et n'ai pas été claire du tout, j'ai l'habitude

    J'ai déjà testé la FAQ en mettant le code indiqué dans le mien, mais ça ne fonctionne pas, ou du moins, ça n'ouvre pas la fenêtre de téléchargement, ça affiche simplement le contenu de mon fichier dans ma page.

    Donc, ce que je voulais dire c'est que, si il faut mettre le code de la FAQ dans un autre fichier qu'il faut appeler avec un onclick ou href, ce serait peut-être intéressant de l'expliquer et si il y a une autre manière de l'utiliser, alors peut-être l'indiquer aussi.

    merci de votre réponse en tout cas, je vais regarder à mes variables

  4. #4
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Au temps pour moi, je n'avais pas vu pour la variable. Elle n'est pas mal utilisée, c'est moi qui ne l'avais pas vue.
    Ton commentaire "Surtout ne pas enlever le \n" m'étonne, car habituellement un \n supplémentaire termine le bloc des headers et marque le début du document. Dans ton cas, le document commencerait donc à "Content-Length"

    Peux-tu m'en dire davantage sur ton utilisation ? Quel navigateur as-tu esssayé, dans quelle version ? Peux-tu m'indiquer un lien pour essayer par moi-même, éventuellement en fournissant le code PHP exact ?

  5. #5
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2008
    Messages : 60
    Points : 50
    Points
    50
    Par défaut
    Alors déjà, j'avoue tout, ce code n'est pas complètement de moi, j'en ai découvert le système en 2002, mais je ne me souviens pas de qui en a la paternité (ou maternité, arrêtons un peu ce sexisme )
    Donc pour le \n, je ne me souviens plus, mais j'ai du tester avec et sans à l'époque, car ce commentaire vient de moi, mais pourquoi, je vais reessayer

    Pour ce qui est de son fonctionnement, je vais t'en donner un exemple :

    http://kalifrance.com/download.php

    tu cliques sur n'importe quel produit et tu verras ce qui se passe.

    Pour la méthodologie du truc :

    dans la page simplement appeler le fichier téléchargement dans le a href en passant le nom du fichier et le chemin en paramètre (évidement, pour ce qui est de la protection des données, c'est moyen vu que c'est du GET et non du POST)

    Et ensuite le fichier telechrg.php contient le code cité plus haut puis une structure html-head-body classique vide (je peux te l'envoyer en mail si tu veux)
    donc rien de bien compliqué

    et à quoi il me sert dans mon nouveau site, à permettre le téléchargement d'un fichier csv issu d'une liste de contact récupérée à chaque fois que les gens déposent un message sur mon site.
    le problème, c'est que je voudrais ne pas avoir à créer le fichier csv dans ce fichier de téléchargement, pour qu'il reste le plus généraliste possible et qu'il me serve partout dans mon site et ne soit pas plein de fonctions qui n'ont rien à voir avoir avec son action première.

    donc il me faut
    - cliquer sur export
    - lancer un script qui génère le csv (ou autre)
    - quand le script de génération est finit, lancer ce fichier comme avec un href

    est-ce que tu as toutes les billes?

    en tout cas, c'est gentil d'y réfléchir avec moi, merci

  6. #6
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2008
    Messages : 60
    Points : 50
    Points
    50
    Par défaut
    effectivement, le \n ne semble rien changer...

    juste comme ça, il a l'air joli ton avatar? c'est toi qui l'a dessiné?

  7. #7
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Je te remercie mais, en fait, j'arrive très bien à faire fonctionner le script. Et je sais à quoi doit ressembler un script qui fonctionne, ce n'est pas cela qu'il me faut mais plutôt un exemple qui ne fonctionne pas (et le source associé, si possible).

    Au sujet de la sécurité, ce n'est pas GET ou POST le problème, puisqu'il est tout autant possible de forger une requête GET que POST. En fait, c'est simplement que tu donnes un chemin d'accès et un nom de fichier. Que se passe-t-il si je modifie le paramètre à un script existant sur ton site, ou pire si je donne le nom de ton script de config (à supposer que je parvienne à le deviner) ?
    Tu devrais enlever ce sript immédiatement, et mettre en place une BDD : indique l'ID numérique du fichier en paramètre, et utilise-le côté serveur pour déterminer le fichier à télécharger. C'est la meilleure approche.

    [Edit] Merci
    Non, je n'ai aucun talent de graphisme, on me l'a fait à une convention il y a quelques années.

  8. #8
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2008
    Messages : 60
    Points : 50
    Points
    50
    Par défaut
    pour l'id, ça va être plus contraignant qu'autre chose,car j'ai un seul fichier qui est généré à la volée quand on clique sur le bouton export dans mon admin.
    donc mettre en place une table pour ça ...
    mais pourquoi pas
    sinon, justement, je voudrais pouvoir le faire côté serveur directement après la génération de mon fichier, mais je ne sais pas comment en php, est-ce qu'il y a un truc équivalent aux createobject etc. de asp, surement en "flux"

    mais comme je n'y connais rien en flux, je n'ai aps encore osé m'y aventurer de peur de chercher pendant 15j dnas la mauvaise direction sans le savoir vu que je n'y connais rien.

    Sinon, pour un script qui ne marche pas... Je ne comprends pas trop alros je vais te donner ce que j'ai fait avec le code de la FAQ la première fois que je l'ai utilisé :

    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
     
    <? 	
    			//pour l'export
                if(isset($_REQUEST["coch"])){
                    $fic = fopen("./temp/tempAdrCsv.csv","w+");
                    fputs($fic,"Prénom;Nom;Nom complet;Adresse de messagerie;Téléphone professionnel\r\n");
                    $tabMail = $_REQUEST["coch"];
                    $nbMail = count($tabMail);
                    for($i=0;$i<$nbMail;$i++){
                        $req = "SELECT * FROM t_con_exp WHERE int_idExp = " . $tabMail[$i];
                        $res = mysql_query($req);
                        $row = mysql_fetch_array($res);
                        $prenom = $row[2];
                        $nom = $row[1];
                        $nomComplet = $prenom ." ". $nom;
                        $mail = $row[3];
                        $tel = $row[4];
                        $lign = $prenom .";". $nom .";". $nomComplet .";". $mail .";". $tel ."\r\n";
                        fputs($fic,$lign);
                    }
                    fclose($fic);
     
    				// on essaie de reconnaitre l'extension pour que le téléchargement corresponde au type de fichier afin d'éviter les erreurs de corruptions 
     
    // Constantes de configuration
    //
     
    define('CFG_SYSTEM_FILENAME', './temp/tempAdrCsv.csv'); // Nom du fichier pour le système
    define('CFG_SEND_FILENAME', CFG_SYSTEM_FILENAME); // Nom du ficher pour le navigateur
     
    //
    // Constantes à ne pas modifier
    //
    define('CFG_FILESIZE', filesize(CFG_SYSTEM_FILENAME));
    define('CFG_FILE_MD5', md5_file(CFG_SYSTEM_FILENAME));
    define('CFG_DATE_FORMAT', 'D, d M Y H:i:s');
     
    //
    // Quelques éléments nécessaires
    //
    error_reporting(0);
    ini_set('zlib.output_compression', 0);
     
     
    /*
    * Les en têtes nécessaires
    */
     
    //
    // Gestion du cache
    //
    header('Pragma: public');
    header('Last-Modified: '.gmdate(CFG_DATE_FORMAT).' GMT');
    header('Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0');
     
    //
    // Informations sur le contenu à envoyer
    //
    header('Content-Tranfer-Encoding: none');
    header('Content-Length: '.CFG_FILESIZE);
    header('Content-MD5: '.base64_encode(CFG_FILE_MD5));
    header('Content-Type: application/octetstream; name="'.CFG_SEND_FILENAME.'"');
    header('Content-Disposition: attachement; filename="'.CFG_SEND_FILENAME.'"');
     
    //
    // Informations sur la réponse HTTP elle-même
    //
    header('Date: '.gmdate(CFG_DATE_FORMAT, time()).' GMT');
    header('Expires: '.gmdate(CFG_DATE_FORMAT, time()+1).' GMT');
    header('Last-Modified: '.gmdate(CFG_DATE_FORMAT, time()).' GMT');
     
     
    /*
    * Envoi du fichier
    */
     
    readfile(CFG_SYSTEM_FILENAME);
            		//ici faire lancer fichier pour téléchargement quand je trouve comment faire ...
                }
     
            ?>
    tu mets le tout dans le fichier qui contient le formulaire listant les contacts en question et qui ont chacun une case à cocher pour savoir lesquels on exporte
    et là, le readfile fait exactement ce qu'on lui demande, il envoi à la sortie standard son contenu => donc le texte de mon csv apparait dan sma page au lieu de lancer une fenêtre de téléchargement...

    voilà ce qui n'allait pas

  9. #9
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    C'st bien ce que je te dis, cela fonctionne pour moi (FF2 et IE7). Quel navigateur utilises-tu ?

  10. #10
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2008
    Messages : 60
    Points : 50
    Points
    50
    Par défaut
    FF2 et IE7 aussi sinon, je suis sur Vista...

    je teste ton test...

  11. #11
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2008
    Messages : 60
    Points : 50
    Points
    50
    Par défaut
    pas moi, mais je crois savoir pourquoi :
    dans le ficheir csv.php, il n'y a rien derrière ...
    alors que moi c'est du php dans plein d'html (un formulaire, une charte etc..)

    ou alors je deviens folle, je vais aller manger, ça me remettra le cerveau à l'endroit
    bon app si tu manges aussi

  12. #12
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2008
    Messages : 60
    Points : 50
    Points
    50
    Par défaut
    bon, je laisse tomber, je vais chercher un moyen de lancer un fichier côté serveur et voilà.

    Merci quand mm du coup de main

    et bon courage pour la suite

  13. #13
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Si tu veux forcer le téléchargement d'un fichier, il ne faut rien envoyer après readfile()

  14. #14
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2008
    Messages : 60
    Points : 50
    Points
    50
    Par défaut
    je sais c'est pour ça que ça ne va pas sur mon système

    imagines :
    tu vas sur l'admin : authentification+ un clic pour se connecter
    ensuite tu vas sur la page des contacts (un clic dans le menu)
    ensuite tu cliques sur les cases des contacts à exporter (ou sur "tout cocher")
    ensuite tu cliques sur "export"
    et là il faudrait encore cliquer sur un lien pour télécharger le fichier ...

    non, ça fait un clic de trop ...

    non, clairement il faut que la fenêtre se lance quand on clique sur "export", mais comme il faut savoir quelle liste est à exporter (form), il faut forcément, soumettre le formulaire avant ...
    donc pouvoir lancer le téléchargement dans la foulée de manière transparente...

    y'a plein de gens qui le font, pourquoi moi je n'y arrive pas ...

  15. #15
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 393
    Points : 15 754
    Points
    15 754
    Par défaut
    à place du "readfile", il suffit que tu fasses un "echo" du contenu du fichier que tu veux proposer en téléchargement, tu n'es pas obligé de créer un fichier temporaire sur le serveur

  16. #16
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Tu as un if, il te suffit de mettre le formulaire dans le else

  17. #17
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2008
    Messages : 60
    Points : 50
    Points
    50
    Par défaut
    Bonjour,

    pour Mathieu :
    euh.. mais si je fais un echo du contenu du fichier, c'est qu'il y a un fichier, et si je ne le génère pas, comment est-ce que j'aurai un fichier dont je pourrai afficher le contenu?

    c'est pas grave...
    Tu voulais surement dire autre chose, mais comme le réveil est difficile je ne comprends pas

    pour Yogui :
    et comment je fais pour tjs voir mon formulaire pendant que je génère mon code et que je lance le téléchargement si je le mets dans le else?
    Sinon, je ferais une page de traitement en plus et ce serait baclé.
    Le but du jeu c'est que ce soit simple fonctionnel et avec le minimum de clic pour l'utilisateur... Donc forcément compliqué pour moi

    je te montre la tête de mon admin que tu te rendes compte en pièce jointe
    tu verras que ce serait très nul d'enlever le formulaire ...

    mais c'est pas possible de faire un code du style ? :

    blablabla...
    <body>
    blablabla...
    <?
    if(j'ai cliqué sur export et j'ai des cases cochées){
    //chercher les mails en fonction des contacts
    //les lister avec nom prénom etc.
    //mettre tout ça en forme dans une variable
    //charger le tout dans un fichier
    //lancer telechrg.php pour que mon client récupère son fichier et puisse l'importer dans son client de messagerie préféré?
    => genre : run("telechrg.php?fichier=test.csv&chemin=./chem/");
    }
    Images attachées Images attachées  

  18. #18
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 393
    Points : 15 754
    Points
    15 754
    Par défaut
    le code du script qui est appelé quand tu cliques sur "export" ressemble à ça :
    Code PHP : 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
    <?php
    // construction du contenu du fichier
    $resultat = "Prénom;Nom;Nom complet;Adresse de messagerie;Téléphone professionnel\r\n";
     
    $tabMail = $_REQUEST["coch"];
    $nbMail = count($tabMail);
    for($i=0;$i<$nbMail;$i++){
        $req = "SELECT * FROM t_con_exp WHERE int_idExp = " . $tabMail[$i];
        $res = mysql_query($req);
        $row = mysql_fetch_array($res);
        $prenom = $row[2];
        $nom = $row[1];
        $nomComplet = $prenom ." ". $nom;
        $mail = $row[3];
        $tel = $row[4];
     
        $resultat .= $prenom .";". $nom .";". $nomComplet .";". $mail .";". $tel ."\r\n";
    }
     
    // envoi des entêtes
    ...
     
    // envoi du contenu
    echo $resultat;

  19. #19
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2008
    Messages : 60
    Points : 50
    Points
    50
    Par défaut
    résultat : le contenu de mon fichier apparait dans ma page et je n'ai pas de proposition de téléchargement.

    le code mis en oeuvre :

    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
     
    //pour l'export
                if(isset($_REQUEST["coch"])&&isset($_REQUEST["action"])&&strcmp($_REQUEST["action"],"ex")==0){
                    //$fic = fopen("./temp/tempAdrCsv.csv","w+");
                    //fputs($fic,"Prénom;Nom;Nom complet;Adresse de messagerie;Téléphone professionnel\r\n");
    				$lign = "Prénom;Nom;Nom complet;Adresse de messagerie;Téléphone professionnel\r\n";
                    $tabMail = $_REQUEST["coch"];
                    $nbMail = count($tabMail);
                    for($i=0;$i<$nbMail;$i++){
                        $req = "SELECT * FROM t_con_exp WHERE int_idExp = " . $tabMail[$i];
                        $res = mysql_query($req);
                        $row = mysql_fetch_array($res);
                        $prenom = $row[2];
                        $nom = $row[1];
                        $nomComplet = $prenom ." ". $nom;
                        $mail = $row[3];
                        $tel = $row[4];
                        $lign = $lign . $prenom .";". $nom .";". $nomComplet .";". $mail .";". $tel ."\r\n";
                        //fputs($fic,$lign);
                    }
                    //fclose($fic);
            		//ici faire lancer fichier pour téléchargement quand je trouve comment faire ...
     
    				define('CFG_DATE_FORMAT', 'D, d M Y H:i:s');
    				error_reporting(0);
    				ini_set('zlib.output_compression', 0);
    				header('Pragma: public');
    				header('Last-Modified: '.gmdate(CFG_DATE_FORMAT).' GMT');
    				header('Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0');
    				header('Content-Tranfer-Encoding: none');
    				header('Content-Type: application/octetstream; name=tempAdrCsv.csv');
    				header('Content-Disposition: attachement; filename=tempAdrCsv.csv');
    				header('Date: '.gmdate(CFG_DATE_FORMAT, time()).' GMT');
    				header('Expires: '.gmdate(CFG_DATE_FORMAT, time()+1).' GMT');
    				header('Last-Modified: '.gmdate(CFG_DATE_FORMAT, time()).' GMT');
    				echo $lign;
                }
    les erreurs potentielles : je me suis plantée dans les en-têtes...
    ps : pas de fichier donc pas de
    define('CFG_FILESIZE', filesize(CFG_SYSTEM_FILENAME));
    define('CFG_FILE_MD5', md5_file(CFG_SYSTEM_FILENAME));
    et pas de
    header('Content-Length: '.CFG_FILESIZE);
    header('Content-MD5: '.base64_encode(CFG_FILE_MD5));

    on est d'accord?
    ou bien faut-il mettre des valeurs fictives ... ?

  20. #20
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    La taille du fichier est en fait strlen()

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/12/2011, 17h43
  2. Proposer le téléchargement d'un fichier côté client (GWT)
    Par womannosky dans le forum GWT et Vaadin
    Réponses: 19
    Dernier message: 06/09/2011, 10h24
  3. Proposer le téléchargement d'un fichier
    Par black is beautiful dans le forum ASP
    Réponses: 8
    Dernier message: 10/09/2007, 14h59
  4. Téléchargement d'un fichier CSV
    Par Mateache dans le forum ASP
    Réponses: 6
    Dernier message: 17/08/2006, 15h14
  5. Réponses: 2
    Dernier message: 30/05/2006, 15h07

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