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 PHP Arrays and Control Structures PHP Conditionals Switch Statements

umut ünal
umut ünal
431 Points

switch case problem?

what am i doing wrong?

switch.php
<?php
//Available roles: admin, editor, author, subscriber
if (!isset($role)) {
    $role = 'subscriber';
}

//change to switch statement
//if ($role != 'admin') {
//echo "You do not have access to this page. Please contact your administrator.";

switch ($role){
  case "subscriber":
    echo "You do not have access to this page. Please contact your administrator.";
    break;
  case "admin":
    echo "As an admin, you can add, edit, or delete any post.";
    break;
}

I don't think that there is anything wrong with your code example. It does exactly what it should do. Since the "$role" variable is not set to anything, your first if-statement assigns a value of "subscriber". The switch-statement then evaluates to "You do not have access to this page. Please contact your administrator.", just as it should. If you have problems running the code, it might stem from the fact that you left out the closing PHP tag "?>", but it should not be necessary if your PHP file only includes PHP code.

Julie Dowler
Julie Dowler
7,851 Points

I can't see anything wrong with it either.

I think your just missing the default statement.

<?php
switch ($role){
  case "subscriber":
    echo "You do not have access to this page. Please contact your administrator.";
    break;
  case "admin":
    echo "As an admin, you can add, edit, or delete any post.";
    break;
  default:
    // Implement default.
}

3 Answers

Your case-statement should not include any actions for "subscriber". The following solution is correct:

<?php
//Available roles: admin, editor, author, subscriber
if (!isset($role)) {
    $role = 'subscriber';
}

//change to switch statement
switch ($role) {
  case 'admin':
    echo "As an admin, you can add, edit, or delete any post.";
    break;
  case 'editor':
    echo "As an editor, you can add or edit any post, and delete your own posts.";
    break;
  case 'author':
    echo "As an author, you can add, edit, or delete your own post.";
    break;
  default:
    echo "You do not have access to this page. Please contact your administrator.";
}
umut ünal
umut ünal
431 Points

thank you so much..

umut ünal
umut ünal
431 Points

thanks for responding. actually it was a challenge question like this:

In the code provided, there are two if statements. The second if statement displays a message IF the user role is not equal to "admin". We want to display separate messages based on the role of the logged in user. First we're going to add a message for our admin and keep the current message as the default. Step 1: Change the second if statement to a switch statement, keeping the current message as the default. Step 2: Add a second check to the switch statement for the role of "admin" and display the following message: As an admin, you can add, edit, or delete any post.

given:

//Available roles: admin, editor, author, subscriber if (!isset($role)) { $role = 'subscriber'; }

//change to switch statement if ($role != 'admin') { echo "You do not have access to this page. Please contact your administrator.";

Maybe i did something wrong..

Julie Dowler
Julie Dowler
7,851 Points

Try this:

<?php
switch ($role){
  case "admin":
    echo "As an admin, you can add, edit, or delete any post.";
    break;
  default:
    echo "You do not have access to this page.   Please contact your administrator.";
    break;
}
umut ünal
umut ünal
431 Points

still not working

umut ünal
umut ünal
431 Points

thanks for replies.. Mihkel Pajunen answer solved the problem