Can't resolve "Undefined variable"

I am reviewing PHP & MySQL Novice to Ninja and following along with the code sections. I’m stuck with this error, though I believe I followed the code as I should. I’ve checked it over and over and can’t see the cause.

The error messages point to line 10, <?php foreach ($authors as $author): ?> :

[I]Notice: Undefined variable: authors in C:\wamp\www\PHP_MySQL\jokecms\authors\authors.html.php on line 10

Warning: Invalid argument supplied for foreach() in C:\wamp\www\PHP_MySQL\jokecms\authors\authors.html.php on line 10[/I]

The code of that page is:

<!DOCTYPE html>
<html lang="en">
<head><title>Manage Authors</title></head>
<!--p192-193 of Yank book. Linked from authors/index.php-->
    <?php include_once $_SERVER['DOCUMENT_ROOT'] . '/includes/'; ?>
    <h1>Manage Authors (p192)</h1>
    <p><a href="?add">Add new author</a></p>
        [COLOR="#FF0000"]<?php foreach ($authors as $author): ?>[/COLOR]
            <form action="" method="post">
                <div id="form">
                    <?php htmlout($author['name']); ?> <!--see>
                    <input type="hidden" name="id" value="<?php echo $author['id']; ?>">
                    <input type="submit" name="action" value="Edit">
                    <input type="submit" name="action" value="Delete">
        <?php endforeach; ?>
    <p><a href="..">Return to JMS home</a></p>


No DB output is displayed; only the above notices and the <h1> and <p> content above and below it. The above is an include (authors.html.php) for this index.php page:

include $_SERVER['DOCUMENT_ROOT'] . '/includes/';
// The query to show authors listed in DB
        $result = $pdo->query('SELECT id, name FROM author');
    catch (PDOException $e)
        $error = 'Error fetching authors from the database!';
        include 'error.html.php';

foreach ($result as $row)
    $authors[] = array('id' => $row['id'], 'name' => $row['name']);

include 'authors.html.php'; // shows authors and Edit/Delete buttons

I can use a couple extra eyes on this!

Define authors as an array before the loop.

$authors = array();
foreach ($result as $row)
    $authors[] = array('id' => $row['id'], 'name' => $row['name']);

With your solution, the error messages go away, but the DB list does not appear. I checked in phpMyAdmin and there is a row of content that should be returned.

I’m stumped. The book shows valid DB output. I don’t see an errata page:

All right - NOW authors appear - after added a couple to the DB