Hi there guys,
I'm trying to output a database query to an html template using php, basically i've got a while loop that replaces the template place-holders with the database info retrieved on the $values array i then replace another place-holders stored in $keys by the $values to the template but its not working and i cant seem to understand what am i doing wrong hopefully a pair of fresh eyes will.
hopefully someone can help understand a bit better how to do this correctly, here is the code that i have:
page2.php
PHP Code:
<?php
require_once 'includes/config.inc.php';
require_once 'includes/functions.inc.php';
$link = mysqli_connect(
$config['db_host'],
$config['db_user'],
$config['db_pass'],
$config['db_name']);
if (mysqli_connect_errno()) {
exit('Sorry, there has been an error. Please try again later.');
}
$sql = "
SELECT
book.title,
book.isbn,
book.published,
book.price,
GROUP_CONCAT(CONCAT(firstname,' ',lastname) ORDER BY lastname ASC SEPARATOR ', ') AS authors
FROM
( book JOIN book_author ON (book.id = book_author.book) )
JOIN
author ON (book_author.author = author.id)
GROUP BY
book.title
ORDER BY
book.title;
";
$result = mysqli_query($link,$sql);
if ($result === false) {
exit('Sorry, there has been an error. Please try again later.');
}
// Check if the query returned anything
if (mysqli_num_rows($result) == 0) {
$output .= '<p class="alert">Sorry, we have no books to display.</p>';
} else {
$tpl = file_get_contents('templates/page.tpl.html');
$values[] = '<h2>[+title+]</h2>';
$values[] = '<p><strong>ISBN:</strong>[+isbn+]</p>';
$values[] = '<p><strong>Published:</strong> '.date('j F Y',strtotime('[+published+]')).'</p>';
$values[] = '<p><strong>Price:</strong> '.toGBP('[+price+]').'</p>';
$values[] = '<p><strong>Authors:</strong> '.htmlentities(toList('[+authors+]')).'</p>';
$keys[] = '[+title+]';
$keys[] = '[+heading+]';
$keys[] = '[+content+]';
return $out;
while ($row = mysqli_fetch_assoc($result)) {
$output .= str_replace(
array('[+title+]', '[+isbn+]', '[+published+]', '[+price+]', '[+authors+]'),
array($row['title'], $row['isbn'], $row['published'], $row['price'], $row['authors'], $values);
}
}
$output1 = str_replace($keys, $values, $tpl);
mysqli_free_result($result);
mysqli_close($link);
echo $output1;
?>
functions.in.php
PHP Code:
<?php
function toList($data) {
$last = count($data)-1;
$list = '';
for ($i=0; $i <= $last; $i++) {
$list .= $data[$i];
if ($i == ($last-1)) {
$list .= ' and ';
} elseif ($i < $last) {
$list .= ', ';
}
}
return $list;
}
function toGBP($money) {
$money = round($money,2); // round to 2 decimal places.
$formatted = sprintf('%01.2f',$money); // Ensure 2 decimal places are always written
return '£'.$formatted;
}
?>
and page.tpl.html
PHP Code:
<html>
<head>
<title>[+title+]</title>
</head>
<body>
<h1>[+heading+]</h1>
[+content+]
</body>
</html>
Thank you in advance for your help guys.