2012-10-16 32 views
1

只要我只有1行,從數據庫中提取的數據就會插入到RTF模板中,而不會出現問題。但是,如果我將header("Content-type: text/rtf")放入循環中,則會收到一個標頭已發送錯誤。從代碼中刪除標題時,原始數據在瀏覽器窗口中正確打印。將MySQL數據導出到創建多個頁面的RTF模板

如何合併數據庫中多個記錄的數據以創建多個文檔(或帶分頁符的1個文檔)?

代碼在這裏:

$document='../docs/letter.rtf'; 
$qry="Select * from table"; 
$result=mysql_query($qry); 
$num_row=mysql_num_rows($result); 

while($row=mysql_fetch_assoc($result)){ 
$account_id=$row['pk_account]; 
$name=$row['first_name']; 
$file_doc='01-'.$pk_account.'.rtf'; 
.... 

$body=file_get_contents($document); 
$body=str_replace("NAME", $name, $body); 
.... 

for($i=0; $i<$num_rows; $i++){ 
} 

header("Content-type: text/rtf"); 
header("Content-Disposition:attachment; filename={$file_doc}"); 
echo $body; 
} 
+0

謝謝你,布萊恩。這是我需要做的,但不知道如何去做。當我在循環內部建立$ body字符串,然後在外部發送標題和正文時,只有最後一條記錄被髮送到模板。 – Buh

+0

你需要追加你的$ body。請參閱答案中的代碼。希望能幫助到你。 –

回答

0

你需要連接你的身體$。因此,而不是這樣的:

$body=file_get_contents($document); 
$body=str_replace("NAME", $name, $body); 

試試這個:

$body.=str_replace("NAME", $name, file_get_contents($document)); 

然後把這個while循環之外:

header("Content-type: text/rtf"); 
header("Content-Disposition:attachment; filename={$file_doc}"); 
echo $body; 
+0

謝謝。你已經把我引向了正確的軌道,但我仍然無法實現它的工作。我有很多行str_replace(Name ...)str_replace(city ...)str_replace(state ...)等。當我將它們全部(。=)協調一致時,輸出模板不會填充mysql數據,它保持不變。它也只生成1個RTF文檔,雖然有8條記錄被while循環拉出。我正在這一天工作2.還有其他建議嗎? – Buh

+0

$ file_doc = '01 - '。$ pk_account。'。rtf';運行每個循環並覆蓋文件名稱。這是你的代碼與你的身體和其他數據發生的事情。它每一個循環都會被重寫。您需要逐步完成代碼執行並清理邏輯流程。此外,您可能試圖在一個循環中完成兩個不同的事情(生成多個文件,然後將它們傳輸到瀏覽器)。 –

+0

我建議將多個文件保存到文件系統,然後分別處理下載或將所有數據合併到一個文件中(我認爲您現在正在嘗試執行此操作)。無論哪種方式,瀏覽器總是隻希望每個請求/執行只有一個響應(不是多個),以便簡單。 –