2012-04-09 7 views
1

MySQLデータベースのコンテンツをPHP経由でWord Template(RTF)にエクスポートしています。エクスポートされたRTFドキュメントでループしないレコード

「付録B」のセクションにレコード用の頭字語がすべて表示されるはずです。このセクションで表示される最小限のレコードは90です(つまり、各レコードには標準頭字語(tblAcronyms)です)。ユーザーがこのリスティング(tblAppendixB)に追加できるので、最大レコードは不明です。

Word(RTF)文書にはすべてのレコードが表示されるはずですが、最初のレコードのみが表示されます。

これは私がこれまで持っているものです。

<?php 
.... 

#Retrieve Appendix B records 
$qry_get_AppB = "SELECT vAcronym, vAcronymDesc FROM tblAcronyms 
        UNION SELECT vAcronym, vAcronymDesc FROM tblAppendixB 
        WHERE fkID = ". $i_fk_id . " ORDER BY vAcronym ASC"; 
$qry_appb_result = mysql_query($qry_get_AppB); 
$qryAppBno_rows = mysql_num_rows($qry_appb_result);  

//Generate the headers to help a browser choose the correct location 
header('Content-Type: application/msword'); 
header('Content-Disposition: inline; filename="'.$vProgramName.'_rec.rtf"); 

//Open the template file 
$tfilename = 'Appb_Template.rtf'; 
$fp = fopen($tfilename, 'r'); 

//Read the template into a variable 
$toutput = fread($fp, filesize($tfilename)); 

fclose($fp); 

//Replace the place holders in the template with data 
if($qryAppBno_rows > 0) 
{ 
    while($rowAppB = mysql_fetch_array($qry_appb_result)) 
    { 
    $vAppB = $rowAppB['vAcronym'] . '-' . $rowAppB['vAcronymDesc'] . "\r\n"; 
    $toutput = str_replace('<<vAppB>>', $vAppB, $toutput); 
    } 
} 

//Send the generated document to the browser 
echo $toutput; 

?> 

私はこのフォーラムなどを捜索したが解決策を見つけるためにまだ持っています。

ご協力いただきまして誠にありがとうございます。

答えて

0

あなたのテンプレートがどのように見えるかわかりませんが、あなたは<<vAppB>>という1つのプレースホルダしか持っていないと思います。最初の繰り返し(使用可能なデータがある場合)では、そのプレースホルダを最初のデータエントリに置き換えます。この事実では、プレースホルダは1つのみ表示されます。あなたには、いくつかの追加作業を行う必要がありので

は、この

... //do your stuff 
$newLine = "\r\n"; 
$appendix = ""; 
while($rowAppB = mysql_fetch_array($qry_appb_result)) { 
    $appendix .= $rowAppB['vAcronym'] . '-' . $rowAppB['vAcronymDesc'] . $newLine; 
} 
$toutput = str_replace('<<vAppB>>', $appendix, $toutput); 
...//do some other stuff 

だけのシンプルなプロトタイピングに似たものに、あなたのコードを書き換える可能性があります。

トリックは、あなたが得たすべてのエントリcollectにして、プレースホルダに置き換えるよりもです:)

+0

問題を解決する方法を教えていただきありがとうございます。変数をエコーすると、すべてのレコードが受信されます(つまり、すべてのエントリを収集する、良いことです)。そこで私はそれらの値を保存する別の変数($ appendix_result = $ appendix)を作成してから、$ toutput = str_replace( ''、$ appendix_result、$ toutput)を作成しました。しかしそれはどちらもうまくいかなかった。私はあなたが提案したものについて正しい軌道に乗っていましたか? – Nicole

+0

Ooops ... @Zipを読もうとしています...ありがとうございました....(申し訳ありません) – Nicole

+0

私はいくつかの変更を加えました...今、すべてのエントリを集めてWordテンプレートにエクスポートしています。ただし、改行しない(改行を挿入する)。コンテンツは一緒に実行されます。これは私が持っているものです.... while($ rowAppB = mysql_fetch_array($ qry_appb_result)){ $ vAppendixB [] = $ rowAppB ['vAcronym'] ' - ' $ rowAppB ['vAcronymDesc']。 $ t_newline; $ vAppB = implode($ t_newline、$ vAppendixB); } $ toutput = str_replace( '<'、$ vAppB、$ toutput);私は近いと知っていますが、私が逃しているものを理解することはできません。繰り返しますが、どんな支援も大歓迎です。 – Nicole

0

私は問題を解決し、 MS Word(RTF)が段落記号として認識するためには、 "\ r \ n"の代わりに "\ par"を使用しなければなりませんでした。

<?php 
.... 

$t_newline = "\par"; 

#Retrieve Appendix B records 
$qry_get_AppB = "SELECT vAcronym, vAcronymDesc FROM tblAcronyms 
       UNION SELECT vAcronym, vAcronymDesc FROM tblAppendixB 
       WHERE fkID = ". $i_fk_id . " ORDER BY vAcronym ASC"; 
$qry_appb_result = mysql_query($qry_get_AppB); 
$qryAppBno_rows = mysql_num_rows($qry_appb_result);  

//Generate the headers to help a browser choose the correct location 
header('Content-Type: application/msword'); 
header('Content-Disposition: inline; filename="'.$vProgramName.'_rec.rtf"); 

//Open the template file 
$tfilename = 'Appb_Template.rtf'; 
$fp = fopen($tfilename, 'r'); 

//Read the template into a variable 
$toutput = fread($fp, filesize($tfilename)); 

fclose($fp); 

//Replace the place holders in the template with data 
if($qryAppBno_rows > 0) 
{ 
    while($rowAppB = mysql_fetch_array($qry_appb_result)) 
    { 
     $vAppendixB[] = $rowAppB['vAcronym'] . '-' . $rowAppB['vAcronymDesc'] . $t_newline; 
     $vAppB = implode(" ", $vAppendixB); 
    } 
} 

$toutput = str_replace('<<vAppB>>', $vAppB, $toutput); 

//Send the generated document to the browser 
echo $toutput; 

?> 

これは他の人に役立つことを願っています。 :-)

関連する問題