【问题标题】:CSV output displays entire HTML page [duplicate]CSV 输出显示整个 HTML 页面 [重复]
【发布时间】:2014-01-24 06:22:11
【问题描述】:

我试图仅显示使用 sql 查询找到的文件,但不是将它们打印到可下载的文件中,而是将整个 html 页面连同它一起打印。我一直在尝试放一个

 break;

在某个地方,但我不确定在哪里。

这是我的代码:

   if(isset($generate))
            {

            header("Content-Disposition: attachment; filename=\"generate_reports.csv\";" );
            header("Content-type: application/vnd.ms-excel");

            $out = fopen("php://output", 'w');
            $flag = false;

            $result = mysql_query("SELECT location_name From locations");
                while(false !== ($row = mysql_fetch_assoc($result)))
                    {
                        if(!$flag)
                            {
                                $list = array("location_name"=>"location");
                                fputcsv($out, array_keys($list), ',', '"');
                                $flag = true;
                            }
                        fputcsv($out, array_values($row), ',', '"');
                    }
            fclose($out);
            }

编辑

我已经添加了它正在打印的 html 代码:

    <h1>Generate Reports</h1>
    <form enctype="multipart/form-data" action="create" method="post">
        <table>
            <tr>
                <td><strong>Materials</strong></td>

<?php
    mysql_connect('localhost', 'root', '');
    mysql_select_db ("design_portal");
    $sql = "SELECT material_name FROM materials";
    $result = mysql_query($sql);

    echo "<td><select name='materials'>";

    while ($row = mysql_fetch_array($result)) 
        {
            echo "<option value='" . $row['material_name'] . "'>" . 
            $row['material_name'] . "</option>";
        }

    echo "</select></td></tr> ";

    $sql2 = "SELECT location_name From locations";
    $result2 = mysql_query($sql2);

?>


                <td><strong>Locations</strong></td>
<?php

    echo "<td><select name='locations'>";
    while ($row2 = mysql_fetch_array($result2)) 
        {
            echo "<option value='" . $row2['location_name'] . "'>" . 
            $row2['location_name'] . "</option>";
        }   

    echo "</select></td></tr>";

?>
    <tr>
        <td><button name="submit" type=submit>Generate</button></td>
        </tr>
    </table>
</form>

【问题讨论】:

  • 能否包含整个文件,包括 HTML?
  • @SyntaxLAMP 我已经包含了 HTML

标签: php mysql csv


【解决方案1】:

假设if(isset($generate))-bit 只是整个文件的一小部分,我建议你在fclose($out); 之后放置一个exit()

break 仅在循环或切换中有用,只会执行脚本的其余部分。 您实际上想要完全终止脚本以防止它这样做并输出其余的 html。

【讨论】:

  • 这几乎成功了!它仍在打印
    标签。我已经更新了我的问题以显示 html。
  • 在您启动 CSV 时已经输出了这些内容。重要的是要知道 php://output 和 echo 的目标是相同的。您只需要 php://output 句柄就可以使用 fputcsv 函数。基本上你需要修改你的代码在你过去生成文件的代码之前不做任何回显。
  • 所以你是在告诉我,一旦我调用 php://output,它会自动生成整个页面?你能解释一下 fopen() 的参数中的“w”是什么意思吗?
  • 只要你做一个回显,它就会输出到用户的浏览器。因此,您在开始调用 fputcsv 之前回显的任何内容都会出现在窗口中。此外,由于您的输出已经开始,标头调用不会产生任何影响。我的意思是 echo 和 fputcsv 都直接进入用户的浏览器。
猜你喜欢
  • 2019-10-26
  • 2019-10-20
  • 2015-03-11
  • 2019-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 2015-02-07
相关资源
最近更新 更多