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 Integrating PHP with Databases Querying the Database with PHP Working with Results

Ray Knag
Ray Knag
8,110 Points

The company you work for wants to send an email to its member base. They want the email to contain a complementary offer

I am at a bit of a loss about what to do for this challenge. After reviewing some other related forum posts the correct code for this challenge is not readily available. I am not sure what variables I should be using outside of $results and in what places. After reviewing the previous videos I am having some difficulty understanding what I need to do as we had not previously integrated a foreach loop with the call from the database. Any tips would be appreciated!

index.php
<?php
include "helper.php";

try {
    $results = $db->query(
        "SELECT member_id, email, fullname, level FROM members"
    );
} catch (Exception $e) {
    echo $e->getMessage();
}
//add code below this line
$user = $results->fetchAll(PDO::FETCH_ASSOC);
foreach ($members as $member) {
  $member_id = $member[member_id];
  $email = $member[email];
  $fullname = $member[fullname];
  $level = $member[level];
}
  send_offer($member_id, $email, $fullname, $level);

2 Answers

The query method returns a PDOStatement object, and you will not need to use fetchAll. Next, you need to include quotes around all of the column names inside the square brackets. Lastly, you will need to include the send_offer function call inside the foreach loop so that it will send an offer to each iteration (if you put it on the outside of the foreach loop, it will just send an offer to the last person). Hope this helps.

<?php
include "helper.php";

try {
    $results = $db->query(
        "SELECT member_id, email, fullname, level FROM members"
    );
} catch (Exception $e) {
    echo $e->getMessage();
}
//add code below this line
foreach ($results as $member) {
  $member_id = $member['member_id'];        //include quotes around member_id
  $email = $member['email'];
  $fullname = $member['fullname'];
  $level = $member['level'];
  send_offer($member_id, $email, $fullname, $level);     //include this inside foreach loop
}
Ray Knag
Ray Knag
8,110 Points

Yes, very much so! Thank you John!