Pregunta

Sé que esta pregunta se ha hecho antes, pero me encontré con un problema.

Por extraño que parezca, cuando ejecuto esta función, incluye el html de la página que el enlace que seleccionó para ejecutar la función.

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

¿Alguien sabe por qué incluiría el HTML en el archivo csv? texto alternativo http://i35.tinypic.com/16i9oxi.jpg

¿Fue útil?

Solución

Mi conjetura es que tienes algún tipo de plantilla que genera el mismo encabezado y pie de página HTML independientemente de la página solicitada. En algún momento antes de que se llame a la función exportCSV, se genera el encabezado.

No se muestra la parte inferior de la salida, pero apuesto a que el pie de página también está allí, ya que sospecho que el control de flujo continuará en ese código después de que la función salga.

Otros consejos

php no es realmente lo mío, pero parece que necesitas borrar la secuencia de respuestas antes de escribir tu contenido. ¿Quizás algo más está escribiendo html en la transmisión, antes de alcanzar esta función? ¿Te gusta una plantilla o página maestra o algo por el estilo?

El contenido HTML se parece a un encabezado / barra de navegación típico. ¿Si hay algo más que incluya automáticamente ese contenido que necesita desactivar para esta ruta?

Tiene un problema de flujo de control en algún lugar: parece que la parte de cabecera html y la navegación están incluidas de forma predeterminada en cualquier página, incluida la que genera el CSV. Una solución sería buscar una solicitud de CSV y, si ese es el caso, no incluya el código html, otra sería usar el búfer de salida y luego descartar toda la salida anterior justo antes de enviar los datos de CSV.

Sugiero inicializar la variable csv_output a la cadena vacía al comienzo de su método. Todas sus operaciones en el método son concatenaciones, por lo que es probable que lleve algunos datos antiguos.

Tenga en cuenta que está mostrando datos potencialmente confidenciales a todo el mundo. Tienes una docena de personas que ahora tienen sus correos electrónicos y direcciones publicadas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top