PHP切换与GET请求

问题描述 投票:3回答:6

我正在为我的网站构建一个简单的管理区域,我希望URL看起来像这样:

http://mysite.com/admin/?home
http://mysite.com/admin/?settings
http://mysite.com/admin/?users

但我不确定如何检索正在请求的页面,然后显示所需的页面。我在我的开关中尝试了这个:

switch($_GET[])
{
    case 'home':
        echo 'admin home';
        break;
}

但我得到这个错误:

Fatal error: Cannot use [] for reading in C:\path\to\web\directory\admin\index.php on line 40

有没有办法解决?我想避免为GET请求设置值,例如:

http://mysite.com/admin/?action=home

如果你明白我的意思。谢谢。 :)

php get switch-statement
6个回答
11
投票

使用$_SERVER['QUERY_STRING'] - 包含?之后的位:

switch($_SERVER['QUERY_STRING']) {
    case 'home':
        echo 'admin home';
        break;
}

您可以进一步采用此方法,并使用以下URL:

http://mysite.com/admin/?users/user/16/

只需使用explode()将查询字符串拆分为段,获取第一个并将其余部分作为方法的参数传递:

$args = explode('/', rtrim($_SERVER['QUERY_STRING'], '/'));
$method = array_shift($args);

switch($method) {
    case 'users':
        $user_id = $args[2];

        doSomething($user_id);
        break;
}

这种方法在许多采用MVC模式的框架中很流行。完全摆脱?的另一个步骤是在Apache服务器上使用mod_rewrite,但我认为这个问题有点超出范围。


2
投票

除了提到的那些,另一个选项是key($_GET),它将返回$ _GET数组的第一个键,这意味着它将与其他参数的URL一起使用

呜呜呜.example.com/?home&没有var = 1;

一个问题是,如果你修改了数组指针,你可能想先在数组上使用reset(),因为key返回当前指向的元素数组指针的键。


1
投票

$_SERVER['QUERY_STRING']


1
投票

不是最“优雅”的方式,但回答你的问题的最简单的形式是..


    if (isset($_GET['home'])):  
        # show index..  
    elseif (isset($_GET['settings'])):  
        # settings...  
    elseif (isset($_GET['users'])):  
        # user actions..  
    else:  
        # default action or not...  
    endif;


1
投票

PHP代码:

switch($_GET){
    case !empty($_GET['home']):
       // code here
    break;

    case !empty($_GET['settings']):
         // code here
    break;   

    default:
         // code here
    break;
}

0
投票

您可以使用$_SERVER['REQUEST_URI']变量使链接“看起来更漂亮”。

这将允许您使用以下URL:

http://mysite.com/admin/home
http://mysite.com/admin/settings
http://mysite.com/admin/users

使用的PHP代码:

// get the script name (index.php)
$doc_self = trim(end(explode('/', __FILE__)));

/*
 * explode the uri segments from the url i.e.: 
 * http://mysite.com/admin/home 
 * yields:
 * $uri_segs[0] = admin
 * $uri_segs[1] = home
 */ 

// this also lower cases the segments just incase the user puts /ADMIN/Users or something crazy
$uri_segs = array_values(array_filter(explode('/', strtolower($_SERVER["REQUEST_URI"]))));
if($uri_segs[0] === (String)$doc_self)
{
    // remove script from uri (index.php)
    unset($uri_segs[0]);
}
$uri_segs = array_values($uri_segs);

// $uri_segs[1] would give the segment after /admin/
switch ($uri_segs[1]) {
    case 'settings':
        $page_name = 'settings';
        break;
    case 'users':
        $page_name = 'users';
        break;
    // use 'home' if selected or if an unexpected value is given
    case 'home':
    default: 
        $page_name = 'home';
        break;
}
© www.soinside.com 2019 - 2024. All rights reserved.