6
votes

in my php,

while($info3 = mysql_fetch_array($result3)){
$Name = $info3["Name"];
$Address = $info3["Address"];
$Age = $info3["Age"];
// -----------------------------------------------------------------------------
$tbl = '
<table style="width: 638px;" cellspacing="0">
    <tr>
        <td style="border: 1px solid #000000; width: 150px;">'.$Name.'</td>
        <td style="border: 1px solid #000000; width: 378px;">'.$Age.'</td>
        <td style="border: 1px solid #000000; width: 110px; text-align:center">'.$Address.'</td>
    </tr>
</table>
';

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

Prints the whole table always in my pdf. But I want to print <table> and </table> for a single instance and then want to loop printing the rows in between. How can I solve this??

4

4 Answers

10
votes
$tbl_header = '<table style="width: 638px;" cellspacing="0">';
$tbl_footer = '</table>';
$tbl = '';

// foreach item in your array...
$tbl .= '
    <tr>
        <td style="border: 1px solid #000000; width: 150px;">'.$Name.'</td>
        <td style="border: 1px solid #000000; width: 378px;">'.$Age.'</td>
        <td style="border: 1px solid #000000; width: 110px; text-align:center">'.$Address.'</td>
    </tr>
';

$pdf->writeHTML($tbl_header . $tbl . $tbl_footer, true, false, false, false, '');
2
votes

If what you mean is you want one table that includes all the results as rows, only loop the row printing and migrate the opening and closing tags outside the loop.

$tbl = '<table style="width: 638px;" cellspacing="0">';

    while($info3 = mysql_fetch_array($result3)){
    $Name = $info3["Name"];
    $Address = $info3["Address"];
    $Age = $info3["Age"];

    $tbl .= '<tr>
            <td style="border: 1px solid #000000; width: 150px;">'.$Name.'</td>
            <td style="border: 1px solid #000000; width: 378px;">'.$Age.'</td>
            <td style="border: 1px solid #000000; width: 110px; text-align:center">'.$Address.'</td>
            </tr>'
     }
$tbl .= '</table>';


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

I would certainly do something like this:

$table = '<table style="width: 638px;" cellspacing="0">%s</table>'
$tr    = '
    <tr>
        <td style="border: 1px solid #000000; width: 150px;"> %s</td>
        <td style="border: 1px solid #000000; width: 378px;"> %s</td>
        <td style="border: 1px solid #000000; width: 110px; text-align:center">%s</td>
    </tr>
';

while($info3 =  = mysql_fetch_array($result3)){
    $trs[] = sprintf($tr, $info3["Name"], $info3["Age"], $info3["Address"]);
}

$tbl = sprintf($table, implode( $trs ));
$pdf->writeHTML($tbl, true, false, false, false, '');

If you can't organize your presentation layer with templates at least make it as separated as you can from the actual logic.

You can read about sprintf here and implode here

0
votes
$tbl = '<table style="width: 638px;" cellspacing="0">';
while($info3 = mysql_fetch_array($result3)){
  $Name = $info3["Name"];
  $Address = $info3["Address"];
  $Age = $info3["Age"];
  // -----------------------------------------------------------------------------
  $tbl = $tbl . '<tr>
          <td style="border: 1px solid #000000; width: 150px;">'.$Name.'</td>
          <td style="border: 1px solid #000000; width: 378px;">'.$Age.'</td>
          <td style="border: 1px solid #000000; width: 110px; text-align:center">'.$Address.'</td>
      </tr>';
  }  
  $tbl = $tbl . '</table>';
  $pdf->writeHTML($tbl, true, false, false, false, '');