Question

Je sais que cette question a déjà été posée, mais j'ai rencontré un problème.

Curieusement, lorsque j’exécute cette fonction, elle inclut le code HTML de la page indiquant le lien que vous avez sélectionné pour exécuter la fonction.

function exportCSV($table) {
    $result = mysql_query("SHOW COLUMNS FROM ".$table."");
    $i = 0;
    if (mysql_num_rows($result) > 0) {
        while ($row = mysql_fetch_assoc($result)) {
            $csv_output .= $row['Field']."; ";
            $i++;
        }
    }
    $csv_output .= "\n";

    $values = mysql_query("SELECT * FROM ".$table."");
    while ($rowr = mysql_fetch_row($values)) {
        for ($j=0;$j<$i;$j++) {
            $csv_output .= $rowr[$j]."; ";
        }
        $csv_output .= "\n";
    }

    $filename = $file."_".date("Y-m-d_H-i",time());
    header("Content-type: application/vnd.ms-excel");
    header("Content-disposition: csv" . date("Y-m-d") . ".csv");
    header( "Content-disposition: filename=".$filename.".csv");
    print $csv_output;
    exit;
}

Quelqu'un sait-il pourquoi il inclurait le code HTML dans le fichier csv? texte alt http://i35.tinypic.com/16i9oxi.jpg

Était-ce utile?

La solution

Je suppose que vous avez une sorte de modèle qui génère le même en-tête et le même pied de page HTML, quelle que soit la page demandée. Quelque temps avant l'appel de la fonction exportCSV, l'en-tête est généré.

Vous ne montrez pas le bas de la sortie, mais je parie que le pied de page est là aussi, car je soupçonne que le contrôle de flux continuera à être appliqué à ce code après la fermeture de la fonction.

Autres conseils

php n'est pas vraiment mon truc, mais il semble que vous deviez effacer le flux de réponses avant d'écrire votre contenu. Peut-être que quelque chose d'autre écrit en HTML dans le flux, avant d'atteindre cette fonction? Vous aimez un modèle, une maquette ou quelque chose de ce genre?

Le contenu HTML ressemble à un en-tête / barre de navigation typique. s'il y a quelque chose d'autre qui inclut automatiquement ce contenu que vous devez désactiver pour cette route?

Vous avez un problème de flux de contrôle quelque part - il semble que la partie tête html et la navigation soient incluses par défaut dans toutes les pages, y compris celle qui génère le fichier CSV. Une solution consisterait à rechercher une demande CSV et, le cas échéant, à ne pas inclure le code html. Une autre solution consisterait à utiliser la mise en mémoire tampon de la sortie, puis à supprimer toute la sortie précédente juste avant la sortie des données CSV.

Je suggère d'initialiser la variable csv_output à la chaîne vide au début de votre méthode. Toutes vos opérations dans la méthode sont des concaténations, vous apporterez donc probablement des données anciennes.

Veuillez considérer que vous montrez des données potentiellement sensibles au monde entier. Vous avez une douzaine de personnes qui ont maintenant leurs adresses électroniques et leurs adresses publiées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top