2012-02-19 3 views
9

У меня есть такая ситуация, когда у меня есть две проверки на переменные GET после проверки первого в одном операторе switch внутри оператора, Вторая переменная должна быть проверена во втором операторе switch внутри первый цикл один случайphp switch statement внутри другого оператора switch

Я не могу опубликовать точный код здесь, но вот пример

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', '1'); 
switch($_GET['parent']){ 
    case 'child1': 
     if(!isset($_GET['child'])){ 
      echo "Only parent"; 
     } 
     else{ 
      switch($_GET['child']){ 
       case 'test': 
        echo 'test'; 
        break; 
      } 
     } 
     break; 

    case 'child2': 
     echo 'child2'; 
     break; 
    default: 
      echo $_GET['parent']; 

} 
?> 

Его прекрасно работать с этим кодом, например, но, когда я использую эту процедуру на моем сервере, контроля будет пропущен по умолчанию у родителей s колдунья заявление, даже если это имеет значение случай соответствия

Нет ошибок в отчетности и cudn't отлаживать больше, чем этот уровень

Plz помочь мне! Я знаю, что вы хотите увидеть код, но я не могу опубликовать его здесь, по крайней мере, вы можете помочь мне отладить больше.

Благодаря

+0

Я не вижу случай по умолчанию для родительского переключателя. Что именно вы получаете для вывода? –

+0

ну, я не добавил здесь значения по умолчанию, но я добавил в реальную проблему – pahnin

+0

Пожалуйста, разместите URL-адрес, когда вы его вводите, что не работает в этом скрипте. Он должен разбирать 'example.com? Parent = child1' просто отлично. –

ответ

26

Согласно PHP Documentation Examples, это возможно, если в случае блок, который содержит вложенный переключатель находится заключите с фигурными скобками.

Отслеживает mentioned example.

<?php 
    switch ($argc) { 
     case 'home': { 
      print('This is $argc, home case.'); 
      break; 
     } 
     case 'subsection': { 
       switch ($argd) { 
        case 'links': { 
          switch($arge) { 
           case 'display': { 
           print('This is $arge, subsection,links,display case.'); 
           break; 
           } 
          } 
        } 
       } 
     } 
    } 
?> 
2

Я не вижу ошибок в коде. Я попробовал это на своей машине, и все работает отлично. Поскольку он также отлично подходит для вас, ошибка больше всего в другом месте.

Там нет причин, почему вложенные заявления переключатель не должно быть возможным, так как заявления переключателя определяются следующим образом:

switch($variable) { 
    case "case1": 
    [statement] 
    break; 
} 

[statement] можно заменить простой командой, например, echo "test";, ряд команд echo "test"; echo "test"; или другой оператор switch. Добавление фигурных скобок ничего не меняет, поскольку они просто служат для группировки серии команд, поэтому для части then можно использовать несколько команд в условных выражениях, таких как if([condition]) [then]. Вышеприведенный ответ, который неожиданно имеет 18 верхних позиций за неправильное консультирование, чтобы добавить фигурные скобки, ничего не меняет.

В заключение можно утверждать, что вложенные операторы switch и способ их использования в вашем примере кода верны. Ошибка в другом месте.

Смежные вопросы