0

我的代码:

<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 文件,但不是下载,而是简单地打印我的查询内容。

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

4

2 回答 2

1

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

于 2013-10-02T16:03:29.307 回答
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 文件。很方便。

于 2017-10-09T19:03:03.227 回答