Почему я получаю HTML при экспорте MySQL в CSV?

StackOverflow https://stackoverflow.com/questions/207019

  •  03-07-2019
  •  | 
  •  

Вопрос

Я знаю, что этот вопрос задавался раньше, но я столкнулся с проблемой.

Как ни странно, когда я выполняю эту функцию, она включает html страницы, ссылку на которую вы выбираете для выполнения функции.

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

Кто-нибудь знает, зачем включать HTML-код в CSV-файл?альтернативный текст http://i35.tinypic.com/16i9oxi.jpg

Это было полезно?

Решение

Я предполагаю, что у вас есть какой-то шаблон, который генерирует один и тот же HTML-заголовок и нижний колонтитул независимо от запрашиваемой страницы.За некоторое время до вызова функции exportCSV генерируется заголовок.

Вы не показываете нижнюю часть выходных данных, но я готов поспорить, что нижний колонтитул там тоже есть, поскольку я подозреваю, что управление потоком будет продолжено для этого кода после завершения работы функции.

Другие советы

php на самом деле не мой конек, но, похоже, вам нужно очистить поток ответов, прежде чем записывать свой контент.Возможно, что-то еще записывает html в поток, прежде чем перейти к этой функции?Например, шаблон, или главную страницу, или что-то в этом роде?

HTML-содержимое выглядит как обычный заголовок / панель навигации.есть ли что-то еще, автоматически включающее этот контент, который вам нужно отключить для этого маршрута?

У вас где-то возникла проблема с потоком управления - кажется, что заголовочная часть html и навигация включены по умолчанию на любую страницу, в том числе и на ту, которая генерирует CSV.Одним из решений было бы проверить наличие CSV-запроса, и если это так, не включать html-код, другим было бы использовать буферизацию вывода, а затем отбросить все предыдущие выходные данные непосредственно перед выводом CSV-данных.

Я предлагаю инициализировать переменную csv_output пустой строкой в начале вашего метода.Все ваши операции в этом методе являются конкатенациями, поэтому вы, скорее всего, берете с собой какие-то старые данные.

Пожалуйста, учтите, что вы показываете потенциально конфиденциальные данные всему миру.У вас есть дюжина людей, которые теперь опубликовали свои электронные адреса и уличные адреса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top