2012-04-09 2 views
1

Я экспортирую содержимое из базы данных MySQL в шаблон Word (RTF) через PHP.Записи не зацикливаются в экспортированном документе 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

Хорошо, я не совсем уверен, как выглядит ваш шаблон, но, я думаю, у вас есть только 1 место под названием <<vAppB>>. На вашей 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

Я решил проблему; Мне пришлось использовать «\ par» вместо «\ r \ n» для MS Word (RTF), чтобы распознать его как знак абзаца. Вот модифицированный код, который теперь работает:

<?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; 

?> 

Надеюсь, это поможет кому-то еще. :-)

Смежные вопросы