PHP переключает ввод ПО УМОЛЧАНИЮ, даже если есть допустимый СЛУЧАЙ?

#php #default #switch-statement

#php #По умолчанию #switch-statement

Вопрос:

У меня есть этот блок переключения:

 switch ($_GET['page']) {

    case "listaOferteTest":
        include("php_views/lista_oferte_test.php");
    break;

    case "categorieOferte":
        include("php_views/categorie_oferte.php");
    break;

    case "pagina":
        include("php_views/pagina.php");
    break;

    default:
        include("php_views/page_not_found_redirect.php");
    break;
}
 

и некоторые ссылки на php [они генерируются динамически, но я вставлю html]:

 <a href='/pagina/termeni-si-conditii/'>
Termeni si conditii
</a>
<a href='/pagina/informatii-utile/'>
Informatii utile
</a>
<a href='/pagina/contact/'>
Contact
</a>
 

У меня есть .htaccess, где я обрабатываю ссылку следующим образом:

 RewriteRule (.*)/(.*)/(.*)/ index.php?page=$1amp;subPage=$2amp;subSubPage=$3 [L]
 

Проблема: когда я тестировал ссылки выше, я заметил странное поведение — примерно из 10 кликов по случайным ссылкам также появляется значение по умолчанию. Как это возможно? Спасибо!

Комментарии:

1. Каково значение $glob[‘page’], когда оно ошибочно отображается по умолчанию?

2. Вы должны включить die(var_dump($glob[‘page’])); в вашем случае по умолчанию.

3. Можете ли вы подтвердить, что значение обрезается до того, как оно попадет в регистр?

4. Спасибо SeRPR! Я попробую!

5. $_GET[‘страница’] не всегда равно ‘pagina’ . Это единственное возможное решение — проверьте остальную часть вашего кода на наличие ошибки или добавьте die($_GET[‘page); к регистру по умолчанию.

Ответ №1:

Моим первым побуждением было бы вытащить отладчик и просмотреть код, чтобы вы могли точно видеть, что происходит. Если у вас не установлен отладчик (почему бы и нет? вы должны, это изменит вашу жизнь!) или, если вы не можете воссоздать проблему с помощью отладчика, учитывая, что она, по-видимому, случайная, тогда лучше всего было бы добавить некоторые записи в блок по умолчанию, чтобы вы могли понять, почему это происходит. Я предполагаю, что $ glob [‘page’] не соответствует ‘pagina’ точно; возможно, у него есть начальный / конечный пробел или косая черта, или, может быть, он пустой, потому что есть ошибка в том, как извлекается это значение. Что-то вроде Monolog выполнит эту работу с точки зрения ведения журнала.

Комментарии:

1. Спасибо! Я буду документировать о таких отладчиках!

Ответ №2:

Тогда вы можете использовать, if ‘s вместо switch .

Например

 if (isset($_GET['page'])) {
   if($_GET['page']=='something') {...}
   if($_GET['page']=='something2') {...}
   ...
}
 

Комментарии:

1. Думаю, я смогу это сделать, спасибо! Но я все равно хотел бы понять, что с этим происходит..

2. Спасибо, Турал! Проблема не в том, что я не знаком со структурами управления php.. Причиной использования switch является более легкий / меньший код.