PHP-переключатель с запросом GET

Я создаю простую область администрирования для своего сайта, и я хочу, чтобы 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 

Если вы понимаете, о чем я. Благодарю. 🙂

Использовать $_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. Дополнительный шаг, чтобы избавиться от ? вообще-то использовать mod_rewrite на серверах Apache, но я думаю, что это немного выходит за рамки этого вопроса.

Как и упомянутые, другой key($_GET) был бы key($_GET) , который вернул бы первый ключ массива $ _GET, что означало бы, что он будет работать с URL-адресами с другими параметрами

http://www.example.com/?home&myvar = 1;

Одна из проблем заключается в том, что вы можете сначала использовать reset () в массиве, если вы изменили указатель массива, когда key возвращает ключ указателя массива элементов в настоящее время.

$_SERVER['QUERY_STRING']

Это не самый «изящный» способ сделать это, но самая простая форма для ответа на ваш вопрос:


     if (isset ($ _ GET ['home'])):  
         # показать индекс ..  
     elseif (isset ($ _ GET ['settings'])):  
         # настроек ...  
     elseif (isset ($ _ GET ['users'])):  
         # действия пользователя ..  
     еще:  
         # действие по умолчанию или нет ...  
     ENDIF;

Код PHP:

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

}

Вы можете сделать ваши ссылки «более приятными», используя переменную $_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 ie: * 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; } не // get the script name (index.php) $doc_self = trim(end(explode('/', __FILE__))); /* * explode the uri segments from the url ie: * 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; }