#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 является более легкий / меньший код.