开发者

how do i add two values for one case using switch?

im trying to create a website using switch commands to navigate with the contents displayed in a table via echo content. everything works fine. but one of the pages consists of multiple pages. The address looks like this website/index.php?content=home etc. but i want to make it like this for the page consisting multiple pages website/index.php?content=home&page=1

my index code:

<?php
switch($_GET['content'])
{
        case "home":
  $content = file_get_contents('home.php');
  $pages = file_get_contents('pages/1.php'); //like this?


 break;

 case "faq":
  $content = file_get_contents('faq.php');


 break;


 default:
  $content = file_get_contents('home.php');
 break;
}
?>

//some code

<?php echo $content; ?>

//some code

the home php:

<?php
switch($_GET['page'])
{
        default:
 case "1":
  $page = file_get_contents('pages/1.php');
 break;



 default:
  $page = file_get_contents('pages/1.php');
 break;
}
?>

// some code

<?php echo $page; ?>

//some code

go to page etc.

but when i do it like this the echo command show开发者_运维问答s me the code of the home.php but not the one of the page i wanna load inside of it. i appreciate any kind of help!


"default" must logically always come last in your switch, since it will match any input that hasn't already been matched by a previous "case" statement.

If you want to do certain actions for multiple values, you can do it like this:

switch ( $var ) {
    case 'foo':
    case 'bar':
        // Do something when $var is either 'foo' or 'bar'
        break;

    default:
        // Do something when $var is anything other than 'foo' or 'bar'
        break;
}


Try using include() instead.

Also, as @Rob said, your second switch() statement is ill formatted. default: should always be last and is used as a "catch-all" for values you didn't specify earlier.


first of all, why don't you use include() instead of file_get_contents()?

Second of all: you could use your "manager" page in this way:

<?php
$myPage = $_GET['page'];
$myContent = $_GET['content']

switch($myContent){
    case "mycontent":
    case "home": include('/home.php');
        if(!empty($myPage)){
            include ('/pages/'.$myPage.'.php');
        }
    break;
    default:
    // do whatever you want
}

?>


Be careful of (as in steweb's example) including files based on user input, even with a prepended path — remember that there's the possibility of executing untrusted code. (Imagine if $_GET['page'] is set to ../../../some-evil-file.php, for example.)

To avoid this, it's easiest to use a whitelist:

$pages = array( 1, 2, 18, 88 );

switch ( $_GET['content'] ) {
    case 'home':
        if ( in_array( $_GET['page'], $pages ) ) {
            include 'pages/' . $_GET['page'] . '.php';
        } else {
            // If an invalid page is given, or no page is
            // given at all, include a default page.
            include 'pages/1.php';
        }
        break;
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜