2013-10-02 49 views
0

我的代碼:下載CSV文件在同一頁面

<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文件形式如下下載,而不是下載,我的查詢的內容只是打印。

我認爲這是因爲我的頭文件已經發送,但有沒有辦法下載文件?

+0

除了你的問題,你正在使用已被depricated的mysql。使用mysqli或PDO。 –

回答

1

把你的php代碼放在html表單上面。

+1

尤其要確保以前沒有任何迴音。或者使用輸出緩衝來控制是否輸出任何內容。 –

+0

它先渲染你的表單然後執行你的php代碼。 –

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文件。很方便。