Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

PHP

Intermediate PHP Workspace - refactoring and onwards

I am going through the workshop and for some reason when I preview I get the following message "Unable to retrieve results".

When I try to view the details on the book 7 Habits of Highly Effective People.

I have tried to debug and watch the videos to see where I might have missed something but so far I am coming out empty.

What I can deduce is that the full_array works.

But the challenge is with the single array.

I have pasted my code below for the (a) functions.php and (b) details.php:

a) functions.php

<?php function full_catalog_array() { include("connection.php");

try {
   $results = $db->query("SELECT media_id, title, category, img FROM Media");
} catch (Exception $e) {
   echo "Unable to retrieve results";
   exit;
}

$catalog = $results->fetchAll();
return $catalog;

} function single_item_array($id) { include("connection.php");

try {
   $results = $db->prepare(
     "SELECT media_id, title, category, img, format, year, genre, publisher, isbn
     FROM Media
     JOIN Genres ON Media.genre_id = Genres.genre_id
     LEFT OUTER JOIN Books ON Media.media_id = Books.media_id
     WHERE Media.media_id = ?"
   );
   $results->bindParam(1,$id,PDO::PARAM_INT);
   $results->execute();
} catch (Exception $e) {
   echo "Unable to retrieve results";
   exit;
}


$item = $results->fetch();
if (empty($item)) return $item;

try {
   $results = $db->prepare(
     "SELECT fullname, role
     FROM Media_People
     JOIN People ON Media.People.people_id = People.people_id
     WHERE Media_People.media_id = ?"
   );
   $results->bindParam(1,$id,PDO::PARAM_INT);
   $results->execute();
} catch (Exception $e) {
   echo "Unable to retrieve results";
   exit;
}
while($row = $results->fetch(PDO::FETCH_ASSOC)) {
   $item[$row["role"]][] = $row["fullname"];
}
return $item;

}
function get_item_html($id,$item) { $output = "<li><a href='details.php?id=" . $item["media_id"] . "'><img src='" . $item["img"] . "' alt='" . $item["title"] . "' />" . "<p>View Details</p>" . "</a></li>"; return $output; }

function array_category($catalog,$category) { $output = array();

foreach ($catalog as $id => $item) {
    if ($category == null OR strtolower($category) == strtolower($item["category"])) {
        $sort = $item["title"];
        $sort = ltrim($sort,"The ");
        $sort = ltrim($sort,"A ");
        $sort = ltrim($sort,"An ");
        $output[$id] = $sort;            
    }
}

asort($output);
return array_keys($output);

}

b) details.php

<?php include("inc/functions.php"); $catalog = full_catalog_array();

if (isset($_GET["id"])) { $id = filter_input(INPUT_GET,"id",FILTER_SANITIZE_NUMBER_INT); $item = single_item_array($id);
}

if (!isset($item)) { header("location:catalog.php"); exit; }

$pageTitle = $item["title"]; $section = null;

include("inc/header.php"); ?>

<div class="section page">

<div class="wrapper">

    <div class="breadcrumbs">
        <a href="catalog.php">Full Catalog</a>
        &gt; <a href="catalog.php?cat=<?php echo strtolower($item["category"]); ?>">
        <?php echo $item["category"]; ?></a>
        &gt; <?php echo $item["title"]; ?>
    </div>

    <div class="media-picture">

    <span>
        <img src="<?php echo $item["img"]; ?>" alt="<?php echo $item["title"]; ?>" />
    </span>

    </div>

    <div class="media-details">

        <h1><?php echo $item["title"]; ?></h1>
        <table>

            <tr>
                <th>Category</th>
                <td><?php echo $item["category"]; ?></td>
            </tr>
            <tr>
                <th>Genre</th>
                <td><?php echo $item["genre"]; ?></td>
            </tr>
            <tr>
                <th>Format</th>
                <td><?php echo $item["format"]; ?></td>
            </tr>
            <tr>
                <th>Year</th>
                <td><?php echo $item["year"]; ?></td>
            </tr>
            <?php if (strtolower($item["category"]) == "books") { ?>
            <tr>
                <th>Authors</th>
                <td><?php echo implode(", ",$item["author"]); ?></td>
            </tr>
            <tr>
                <th>Publisher</th>
                <td><?php echo $item["publisher"]; ?></td>
            </tr>
            <tr>
                <th>ISBN</th>
                <td><?php echo $item["isbn"]; ?></td>
            </tr>    
            <?php } else if (strtolower($item["category"]) == "movies") { ?>
            <tr>
                <th>Director</th>
                <td><?php echo implode(", ",$item["director"]); ?></td>
            </tr>
            <tr>
                <th>Writers</th>
                <td><?php echo implode(", ",$item["writer"]); ?></td>
            </tr>
            <tr>
                <th>Stars</th>
                <td><?php echo implode(", ",$item["star"]); ?></td>
            </tr>
            <?php } else if (strtolower($item["category"]) == "music") { ?>
            <tr>
                <th>Artist</th>
                <td><?php echo implode(", ",$item["artist"]); ?></td>
            </tr>
            <?php } ?>
        </table>

    </div>

</div>

</div>

1 Answer

Denny Schouten
Denny Schouten
8,246 Points

hi, i spotted something in your query at your function single_item_array($id) 2nd try block.

JOIN People ON Media.People.people_id = People.people_id It should probably be Media_People.people_id

tip since you try to debug, echo out the exception ($e) it helps quite a bit