Domanda

So che questa domanda è stata posta prima, ma ho riscontrato un problema.

Stranamente, quando eseguo questa funzione, include l'html della pagina che il link selezionato per eseguire la funzione.

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;
}

Qualcuno sa perché dovrebbe includere l'HTML nel file CSV? alt text http://i35.tinypic.com/16i9oxi.jpg

È stato utile?

Soluzione

La mia ipotesi è che tu abbia una sorta di modello che genera la stessa intestazione e piè di pagina HTML indipendentemente dalla pagina richiesta. Qualche tempo prima che venga chiamata la funzione exportCSV, viene generata l'intestazione.

Non mostri il fondo dell'output, ma scommetto che c'è anche il piè di pagina, dal momento che sospetto che il controllo del flusso continuerà su quel codice dopo che la funzione sarà terminata.

Altri suggerimenti

php non è davvero la mia cosa, ma sembra che tu debba cancellare il flusso di risposta prima di scrivere i tuoi contenuti. Forse qualcos'altro sta scrivendo HTML nello stream, prima di raggiungere questa funzione? Ti piace un modello o una pagina master o qualcosa del genere?

Il contenuto HTML si presenta come una tipica barra di intestazione / navigazione. se c'è qualcos'altro che include automaticamente quel contenuto che devi disabilitare per questa rotta?

Hai un problema con il flusso di controllo da qualche parte: sembra che la parte head html e la navigazione siano incluse di default in qualsiasi pagina, inclusa quella che genera il CSV. Una soluzione sarebbe quella di verificare la presenza di una richiesta CSV e, in tal caso, non includere il codice html, un'altra sarebbe utilizzare il buffering dell'output e quindi scartare tutto l'output precedente prima di inviare i dati CSV.

Suggerisco di inizializzare la variabile csv_output sulla stringa vuota all'inizio del metodo. Tutte le tue operazioni nel metodo sono concatenazioni, quindi probabilmente stai portando con te alcuni vecchi dati.

Tieni presente che stai mostrando dati potenzialmente sensibili a tutto il mondo. Hai una dozzina di persone che ora hanno pubblicato la loro e-mail e i loro indirizzi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top