1

私はこの質問が以前に尋ねられたことを知っていますが、私は問題に遭遇しました。

奇妙なことに、この関数を実行すると、関数を実行するために選択したリンクが含まれているページの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;
}

csvファイルにHTMLが含まれる理由を誰かが知っていますか? 代替テキストhttp://i35.tinypic.com/16i9oxi.jpg

4

5 に答える 5

3

私の推測では、要求されたページに関係なく、同じ HTML ヘッダーとフッターを生成する何らかのテンプレートがあると思います。exportCSV 関数が呼び出される少し前に、ヘッダーが生成されます。

出力の下部は表示されませんが、関数が終了した後、フロー制御がそのコードに続くと思われるため、フッターもそこにあるに違いありません。

于 2008-10-16T00:49:49.283 に答える
1

php は私の好みではありませんが、コンテンツを書き出す前に応答ストリームをクリアする必要があるようです。おそらく、この関数に到達する前に、他の何かがストリームに html を書き込んでいるでしょうか? テンプレートやマスター ページ、またはそのような性質のものが好きですか?

HTML コンテンツは、典型的なヘッダー/ナビゲーション バーのように見えます。このルートで無効にする必要があるコンテンツを自動的に含むものが他にある場合は?

于 2008-10-16T00:38:03.847 に答える
0

潜在的に機密性の高いデータを全世界に公開していることを考慮してください。メールアドレスと住所を公開しているユーザーが 10 人もいます。

于 2008-10-16T01:01:49.197 に答える
0

どこかに制御フローの問題があります - CSV を生成するページを含め、HTML の head 部分とナビゲーションがデフォルトでどのページにも含まれているようです。1 つの解決策は、CSV 要求を確認することです。その場合は、html コードを含めないでください。別の解決策は、出力バッファリングを使用し、CSV データを出力する直前に以前の出力をすべて破棄することです。

于 2008-10-16T00:40:35.497 に答える
0

メソッドの開始時に csv_output 変数を空の文字列に初期化することをお勧めします。メソッド内のすべての操作は連結であるため、古いデータを持ち込む可能性があります。

于 2008-10-16T00:43:25.210 に答える