Как вывести содержимое таблицы MySQL в PDF с помощью tcpdf? - PullRequest
1 голос
/ 12 февраля 2012

Мне нужно создать PDF-документ, который выводит все строки из таблицы MySQL, но в приведенном ниже коде выводит только одну последнюю строку из этой таблицы. У кого-то есть время, чтобы проверить мой код и предложить мне исправление, или у кого-то есть лучший код для такого отчета?

Ответы [ 3 ]

3 голосов
/ 25 марта 2012

Ответ на мой вопрос является правильным ответом на вопрос, на который дан ответ по следующей ссылке: TCPDF - печать таблицы из mysql с повторением первой строки

Код здесь:

0 голосов
/ 12 февраля 2012
$db = mysql_connect($hostname, $db_user, $db_password);
mysql_select_db($database,$db);
$rnBr = mysql_real_escape_string(trim($_POST['rnBr']));  
$zahtjev = $_GET['rnBr'];
$upit = "SELECT * FROM radni where formDatum >= CURDATE() and formDatum < (CURDATE()+  interval 7 day) order by formDatum asc";
$result = mysql_query($upit);

require_once('../config/lang/hrv.php');
require_once('../tcpdf.php');
// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('XXXXX');
$pdf->SetTitle('TCPDF Radni nalog');
$pdf->SetSubject('TCPDF Radni nalog');
$pdf->SetKeywords('TCPDF, PDF, radni, nalog, ispis');

//set some language-dependent strings
$pdf->setLanguageArray($l);
// ---------------------------------------------------------
// set font
$pdf->SetFont('dejavusans', '', 14, '', true);
// add a page
$pdf->AddPage();

$tbl = <<<EOD
<table border=""  cellpadding="0" cellspacing="7" align="center" fontsize="14">
<tr>
<td></td><td><br /><br /><br /><br /></td>
</tr>
<tr>
<th colspan="2"><h1>Tjedni raspored djelatnika</h1></th>
</tr>
</table>
EOD;
$pdf->writeHTML($tbl, true, false, false, false, ''); 
$pdf->Ln();
$pdf->SetLineStyle(array('width' => 0.0, 'cap' => 'butt', 'join' => 'miter', 'dash' => 4, 'color' => array(255, 0, 0)));
$pdf->SetFillColor(255,255,128);
$pdf->SetTextColor(0,0,128);

$pdf->Ln();

$tbl = <<<EOD
<table border="1"  cellpadding="0" cellspacing="3" align="center" fontsize="12">
<tr>
<th colspan="1">Radni nalog:</th>
<th colspan="1">Datum:</th>
<th colspan="1">Izvršitelj:</th>
<th colspan="1">Tvrtka:</th>
<th colspan="1">Poslovnica:</th>
<th colspan="1">Napomena:</th>
<th colspan="1">RN izdao:</th>
</tr>
</table>
EOD;

$pdf->writeHTML($tbl, true, false, false, false, '');

$pdf->Ln();

$tbl = '<table border="1"  cellpadding="0" cellspacing="3" align="center" fontsize="10">';
 while($row = mysql_fetch_assoc($result)) {

  $tbl .="<tr>
<td>{$row['rnBr']}</td> 
<td>{$row['formDatum']}</td>
<td>{$row['formIzvrsio']}</td> 
<td>{$row['formTvrtka']}</td>
<td>{$row['formPoslovnica']}</td>
<td>{$row['formNapomene']}</td>
<td>{$row['formIzdavatelj']}</td>
</tr>";
 }

$tbl = '</table>';

$pdf->writeHTML($tbl, true, false, false, false, '');

// Set some content to print
$html = <<<EOD
<i>Ovaj popis generiran je računalnim programom!</i>
EOD;
$pdf->writeHTMLCell($w='', $h='', $x='', $y='', $html, $border=1, $ln=1, $fill=1, $reseth=true, $align='center', $autopadding=true);

// ---------------------------------------------------------
//Close and output PDF document
$pdf->Output('raspored_djelatnika.pdf', 'I');
0 голосов
/ 12 февраля 2012

Один из способов сделать это:

the while loop
(
  if($number_of_rows > 0) { 

    while($row = mysql_fetch_assoc($result)) 
    { 
        $RN = $row['rnBr']; 
        $Tvrtka = $row['formTvrtka']; 
        $Poslovnica = $row['formPoslovnica']; 
        $Datum = $row['formDatum'];
        $Izvrsio = $row['formIzvrsio'];
        $Kontakt = $row['formKontakt'];
        $Napomene = $row['formNapomene'];
        $Izdavatelj = $row['formIzdavatelj']; 
     } 
  }
)

Нужно быть там, где это:

<tr>
    <td>$RN</td> 
    <td>$Datum</td>
    <td>$Izvrsio</td> 
    <td>$Tvrtka</td>
    <td>$Poslovnica</td>
    <td>$Napomene</td>
    <td>$Izdavatelj</td>
</tr>

Таким образом, вы получите что-то вроде

if($number_of_rows > 0) { 

   while($row = mysql_fetch_assoc($result)) 
   { 
       echo '<tr>';
       echo '<td>'. $row['rnBr'].'</td>'; 
       echo '<td>'. $row['formTvrtka'].'</td>'; 
       echo '<td>'. $row['formPoslovnica'].'</td>';  
       echo '<td>'. $row['formDatum'].'</td>'; 
       echo '<td>'.  $row['formIzvrsio'].'</td>'; 
       echo '<td>'. $row['formKontakt'].'</td>'; 
       echo '<td>'. $row['formNapomene'].'</td>'; 
       echo '<td>'. $row['formIzdavatelj'].'</td>';  
    } 
 }

в противном случае да, вы выводите только последнюю строку, найденную запросом.

Альтернативно измените каждую строку следующим образом:

$RN = $row['rnBr']; to $RN[$n] = $row['rnBr']; (with $n++ at the end of your loop and $n=0; before the loop

Затем вдно при выводе можно сделать:

for($u=0;$u<count($rn);$u++){
    <tr>
        <td>$RN[$u]</td> 
        <td>$Datum[$u]</td>
        <td>$Izvrsio[$u]</td> 
        <td>$Tvrtka[$u]</td>
        <td>$Poslovnica[$u]</td>
        <td>$Napomene[$u]</td>
        <td>$Izdavatelj[$u]</td>
    </tr>
}
...