Pergunta

Eu sei que esta pergunta foi feita antes, mas eu tive um problema.

Curiosamente, quando eu executar esta função, ele inclui o html da página que o link que você selecionar para executar a função.

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

Alguém sabe por que isso incluiria o HTML no arquivo CSV? alt texto http://i35.tinypic.com/16i9oxi.jpg

Foi útil?

Solução

Meu palpite é que você tem algum tipo de modelo que gera o mesmo cabeçalho HTML e rodapé, independentemente da página que é solicitado. Algum tempo antes da função exportCSV é chamado, é gerado o cabeçalho.

Você não mostram a parte inferior da saída, mas eu aposto que o rodapé está lá também, desde que eu suspeito que o controle de fluxo irá continuar até que o código após as saídas de função.

Outras dicas

php não é realmente minha coisa, mas parece que você precisa limpar o fluxo de resposta antes de escrever o seu conteúdo. Talvez algo mais está escrevendo html para o fluxo, antes de chegar a esta função? Como uma página modelo ou mestre ou algo dessa natureza?

Os olhares de conteúdo HTML como um cabeçalho típica / nav bar. se há algo mais que está incluindo automaticamente que o conteúdo que você precisa desativar para esta rota?

Você tem um controle problema de fluxo em algum lugar - parece que a parte da cabeça html e navegação é incluído por padrão em qualquer página, incluindo no que gera o CSV. Uma solução seria para verificar se há um pedido CSV e se esse for o caso, não inclua o código html, outra seria a de buffer de saída uso e, em seguida, descartar todo o direito de saída anterior antes de emitir os dados CSV.

Eu sugiro inicializar a variável csv_output para a cadeia vazia no início do seu método. Todas as suas operações no método são concatenações, então você provavelmente está trazendo ao longo de alguns dados antigos.

Por favor, considere que você está mostrando dados potencialmente sensíveis para o mundo inteiro. Você tem uma dúzia de pessoas que agora têm seus e-mails e endereços de rua publicada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top