Почему я получаю HTML в моем MySQL экспорт в CSV? - PullRequest
1 голос
/ 16 октября 2008

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

Как ни странно, когда я выполняю эту функцию, она включает 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

Ответы [ 5 ]

3 голосов
/ 16 октября 2008

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

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

1 голос
/ 16 октября 2008

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

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

0 голосов
/ 16 октября 2008

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

0 голосов
/ 16 октября 2008

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

0 голосов
/ 16 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...