2013-07-17 2 views
0

Я хочу знать, к чему обращался пользователь URL. Например, если пользователь получал доступ:

index.php регистр

это эхо '1'.

if (isset($_GET)) 
{ 
    switch ($_GET) 
    { 
     case "register": 
      echo 1; 
     break; 
    } 
} 

Но это ничего не значит, почему? Как вы получаете имя первого элемента GET?

+0

'var_dump ($ _ GET)', чтобы увидеть, что там есть. – Neal

+2

Вы имеете случай, когда '$ _GET = register', который никогда не является истинным. Вам нужно пройти через массив в парах key => value, чтобы проверить, где 'switch ($ key) {case" register "' –

+0

'array_keys',' $ _REQUEST', 'isset ($ _ GET ['register'])' , 'array_key_exists ($ _ GET, 'register')' ... пробовал любой из них? –

ответ

4

$_GET - это массив. Вы должны были бы поместить этот переключатель заявление внутри цикла Еогеаспа:

foreach ($_GET as $k => $v) { 
    switch ($k) { 
     case 'register': 
      echo 1; 
     break; 
    } 
} 

Кроме того, $_GET суперглобальных является всегда набора - нет необходимости в if (isset($_GET)) {

-3

$ _GET представляет собой ассоциативный массив , поэтому он структурирован в key=value элементов

вы можете использовать этот URL: index.php?page=register с этим кодом:

if (isset($_GET['page'])) 
{ 
    switch ($_GET['page']) 
    { 
     case "register": 
      echo 1; 
     break; 
    } 
} 

ИЛИ с этим URL index.php?register использовать этот код:

foreach ($_GET as $key => $value) { 
    switch ($key) { 
     case 'register': 
      echo 1; 
     break; 
    } 
} 
+0

Существует ** нет причин ** для этого ... – Neal

+1

Вы можете сделать 'index.php? Register'. Он просто заставляет '$ _GET ['register']' пустую строку. –

+0

@Neal Нужно ли вам делать все, что видите? – samayo

1

$_GET является суперглобальным массивом. Он всегда установлен и всегда является массивом.

Если вы знаете, что register будет всегда быть первым GET элемент, то вы можете сделать это:

reset($_GET); 
switch (key($_GET)){ 
    case "register": 
     echo 1; 
    break; 
} 

Docs для key(): http://php.net/key

+0

Что делать, если что-то перед 'switch' переместило указатель? – Leri

+1

@PLB: Я предполагаю, что указатель '$ _GET' не был перемещен, но я добавил' reset ($ _ GET); ':-) –

3

Вы можете использовать array_keys(), чтобы получить для каждого $ _GET, затем используйте 0 index, чтобы определить, что вы хотели сделать с помощью первого ключа:

if($_GET){ 
    $keys = array_keys($_GET); 
    switch ($keys[0]){ 
     case "register": 
      echo 1; 
     break; 
    } 
} 
Смежные вопросы