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");
}
?>

基本的に、フォームを同じページに送信しています。フォームの下で 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 ファイルは、DB へのアクセスと CSV の出力を処理します。これを独自の方法で使用してください。問題なく別のファイルからインクルードできるのはいいことだと思いました。

IF と php を一番上に置くと、実際にはExportボタンでページが更新されず、訪問者は CSV ファイルを開くか保存するかを尋ねる標準のポップアップが表示されます。とても便利。

于 2017-10-09T19:03:03.227 に答える