通过GET将CSV文件下载到同一页面

时间:2013-10-02 16:00:24

标签: php csv get http-headers

我的代码:

<form action="" method="GET">
    <p><input name="date_start" type="text" id="datestart" /> to
        <input name="date_end" type="text" id="dateend" /></p>
    <button type="submit">Generate!</button>
</form>
<?php
if ($_GET["date_start"] && $_GET["date_end"]) {   
    $users_list = mysql_query("my query", $dbc) or die(mysql_error());

    $output = fopen("php://output", 'w') or die("Can't open php://output");
    header("Content-Type:application/csv");
    header("Content-Disposition:attachment;filename=user_list.csv");

    fputcsv($output, array("First Name", "Last Name", "Email", "Mobile", "Site"));
    while ($row = mysql_fetch_assoc($users_list)) {
        fputcsv($output, $row);
    }
    fclose($output) or die("Can't close php://output");
}
?>

基本上我将我的FORM发送到同一页面,在我检查我的GET变量的表格下面,并尝试强制下载CSV文件,但不是下载,而是简单地打印我的查询内容。

我认为这是因为我的标题已经发送,但有没有办法下载文件?

2 个答案:

答案 0 :(得分:1)

将您的PHP代码放在html表单上方。

答案 1 :(得分:0)

我在使用POST创建自己的表单/ CSV时遇到了这个问题。

想想我会用自己的例子添加更多信息。

摘自我的例子:

if($_POST[submit] === "Export" && _other_test_here_ )
{
    //export CSV of all entries
    include('csv-export.php');
}
else
{
    HTML GOES HERE
    <form method="post" name="form-export" action="" onsubmit="">
        <input type="submit" name="submit" value="Export" />
        <input type="hidden" name="uid" value="<?php echo($row['uid']); ?>" />
        <textarea name="comment" readonly="true" ><?php echo($row['comment']); ?></textarea>
    </form>
}

包含的php文件处理访问数据库并输出CSV。以自己的方式使用它。我发现很高兴能够毫无困难地从其他文件中包含它。

将IF和php置于顶端实际上导致我的Export按钮甚至不刷新页面,访问者只需获得一个标准弹出窗口,询问他们是否要打开或保存CSV文件。非常方便。