2008-10-16 26 views
1

我知道這個問題之前已經被問過了,但我遇到了一個問題。爲什麼我在我的MySQL中導出爲CSV格式的HTML?

奇怪當我執行此功能,包括鏈接選擇執行函數頁面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? alt text http://i35.tinypic.com/16i9oxi.jpg

+0

你可以發佈一些代碼,顯示如何調用exportCSV()? – 2008-10-16 00:40:18

+0

我使用switch語句,當調用case「export」時,它執行導出功能。 case「export」; \t exportCSV('志願者'); 休息; – Brad 2008-10-16 00:49:22

+0

是否在生成頁眉和頁腳的代碼中使用case語句? – 2008-10-16 01:07:43

回答

3

我的猜測是,你有某種模板,無論是產生所請求的頁面相同的HTML頁眉和頁腳。在調用exportCSV函數之前的某個時間,會生成標題。

你不顯示輸出的底部,但我敢打賭,頁腳也在那兒,因爲我懷疑函數退出後,流量控制將繼續到該代碼。

1

php是不是真的我的事情,但它似乎是你需要清除響應流之前寫出你的內容。也許別的什麼東西在寫入HTML之前,到達這個函數?像模板或母版頁或類似的東西?

HTML內容看起來像一個典型的頁眉/導航欄。如果還有其他內容會自動包含您需要爲此路線禁用的內容?

0

你已經有了一個控制流問題的地方 - 它似乎是HTML頭部和導航在任何頁面默認包含,包括在生成CSV之一。 一種解決方案是檢查CSV請求,如果是這種情況,不要包含html代碼,另一種方法是使用輸出緩衝,然後在輸出CSV數據之前丟棄所有先前的輸出。

+0

我有一個功能只是打印索引頁面上的導航。索引頁面基本上是一個switch語句,根據您點擊的鏈接執行適當的功能。 – Brad 2008-10-16 00:46:50

0

我建議你的方法開始初始化變量csv_output爲空字符串。您在該方法中的所有操作都是連接,因此您可能會帶來一些舊數據。

+0

將其設置爲$ csv_output =''; 它沒有工作,但謝謝你。 – Brad 2008-10-16 00:55:47

0

請考慮您正在向全世界顯示可能敏感的數據。你有十幾個人現在已經發布了他們的電子郵件和街道地址。