PbClasses - PbTpl-Tutorial

Example 5 - Showing data from database table

In this example we will display a whole table from the database using the class SqlPdo from PbClasses.

Example table from database

id first_name last_name address city state zip
1 John Doe 123 Maple St Springfield IL 62704
2 Jane Smith 456 Oak Ave Madison WI 53703
3 Emily Johnson 789 Pine Rd Austin TX 73301
4 Michael Brown 321 Birch Blvd Denver CO 80202
5 Sarah Davis 654 Cedar Dr Portland OR 97201
6 David Miller 987 Spruce Ln Seattle WA 98101
7 Laura Wilson 111 Elm St Boston MA 02108
8 Daniel Taylor 222 Ash Ct Chicago IL 60601
9 Sophia Anderson 333 Fir Way San Diego CA 92101
10 James Thomas 444 Willow Pkwy Phoenix AZ 85001
PHP-Code
<?php
use PbClasses\PbTpl;
use MyProject\DbConnection;
use PbClasses\Util\Filter;

try {
    $db = DbConnection::get();
    $table = 'customer';
    $rowsArr = $db->selectAssoc($table); //We want all.   
} catch (\Exception $exc) {
    echo $exc->getMessage(); 
    exit;
}

try {
    $c = new PbTpl('./templates/content_05.tpl');
    $seRe = [
        //building the headline from the keys of the first row.
        'head_row' => getHeadRow($c, array_keys($rowsArr[0])), 

        'body_rows' => getBodyRows($c, $rowsArr)
    ];
    return $c->fillTpl('content', $seRe);
    
} catch (\Exception $exc) {
    echo $exc->getMessage();
    exit;
}

function getHeadRow($c, $keyArr) {
    return $c->fillRowTpl('th', 'entry', $keyArr);
}

function getBodyRows($c, $rowsArr) {
    $rowBuffer = '';
    
    foreach($rowsArr as $row) {
        //The values from the table should be masked with htmlentities.
        //We use the filter class that was introduced in the previous eyample.
        $tdRow = $c->fillRowTpl('td', 'entry', Filter::numericArr(array_values($row)));
        $rowBuffer .= $c->fillTpl('body_row', 'td_row', $tdRow);
    }
    return $rowBuffer;
    
}

Template-Code

[content]

<h3>Example table from database</h3>
<table>
    <tr>{HEAD_ROW}</tr>
    {BODY_ROWS}
</table>

###################
[th]
<th>{ENTRY} </th>

[body_row]
<tr>{TD_ROW}</tr>

[td]
<td>{ENTRY}</td>