2016-04-02 69 views
0

我最近做了一個網站,並在我的sql中有一個成員表。我有一個管理頁面,可以用列名下載它;但是我曾經使用INTO OUTFILE,但是我的主機不允許這樣做。我想出了這個代碼來下載文件:fputcsv不顯示來自php的mysql表

if(file_exists('downloads/members_'.date("m-d-Y").'.csv') == true) { 
    header("Location: /downloads/members_".date("m-d-Y").".csv"); 
} 

$output = fopen('downloads/members_'.date("m-d-Y").'.csv', 'w+'); 

fputcsv($output, array('memberID','username', 'password', 'email', 'active', 'resetToken', 'resetComplete', 'support', 'supportToken')); 

$rows = mysql_query("SELECT * FROM members;"); 
while ($row = mysql_fetch_assoc($rows)) fputcsv($output,$row); 
header("Location: /downloads/members_".date("m-d-Y").".csv"); 
exit; 

這只是輸出列名和我從來沒有使用過fputcsv和我什麼我做錯了糊塗一點點。我得到的文件下載,但沒有與表中。

[編輯]我只是用有效的SQL查詢試了一下,它不起作用。更新後的代碼。另外還有成員表中的東西。

+0

你確定查詢的結果集不是空的嗎? – Reversal

+0

這不是一個有效的sql語句:'SELECT * FROM'members';'。 – arkascha

+0

你測試了我的答案嗎?如果它不起作用,請告訴我你的錯誤。 –

回答

1

試試這個:

if (isset($_POST['download'])) { 
    $result = mysql_query("SELECT * FROM members", $connection); 
    header('Content-Type: text/csv'); 
    header('Content-Disposition: attachment;filename=yourcsv.csv'); 
    header('Cache-Control: no-cache, no-store, must-revalidate'); 
    header('Pragma: no-cache'); 
    header('Expires: 0'); 
    $csvoutput = fopen('php://output', 'w'); 
    $row = getRow($result); 
    $headers = array_keys($row);//columns from db e.g, memberID','username',... 
    fputcsv($csvoutput, $headers); 
    fputcsv($csvoutput, $row); 
    while ($row = getRow($result)) { 
     fputcsv($csvoutput, $row); 
    } 
    fclose($csvoutput); 
    exit; 
    } 

這是您的getRow()函數:

function getRow($res){ 
    return mysql_fetch_assoc($res); 
    } 

而在你的HTML:

<input type="submit" name="download" value="Download CSV"> 

這裏是實時演示與sqllite3數據庫。取消對create database和insert語句的註釋,以查看正在工作的demo。我已經測試,它工作正常。我希望這能幫到您。

+0

它輸出一個空白/無效的csv – MathMXC

+0

好吧......我會用真實數據更新我的答案。 –

+0

我已經通過工作演示更新了我的答案。如果有幫助,請點擊上面的勾號圖標。 –