2008-10-16 49 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

请考虑您正在向全世界显示可能敏感的数据。你有十几个人现在已经发布了他们的电子邮件和街道地址。