Это мой сценарий switch-case:
switch ($_GET['page'])
{
case '?users':
.....
default: echo 'Welcome';
}
Этот скрипт работает нормально, но когда я загружаю страницу в первый раз, он возвращает ошибку:
Notice: Undefined index: page in
Я знаю почему, потому что скрипт не знает, что такое значение. Как установить значение по умолчанию и избежать ошибки?
0
Klapsius
28 Авг 2014 в 12:06
2 ответа
Лучший ответ
Используйте isset()
: EDITED
if(isset($_GET['page'])){
switch ($_GET['page'])
{
case 'users':
.....
default: echo 'Welcome';
}
}
2
Suchit kumar
28 Авг 2014 в 12:23
1
-1 Из документации isset():
– Returns TRUE if var exists and has value other than NULL, FALSE otherwise.
Как можно ты false == '?users'
?
Francisco Presencia
28 Авг 2014 в 12:11
Presencia я редактировал, поэтому понизил голос.
– Suchit kumar
28 Авг 2014 в 12:13
Потому что ваш предыдущий код был явно неверным (вы не должны переключать true/false). Теперь я отменил отрицательный голос.
– Francisco Presencia
28 Авг 2014 в 12:14
Оператор case по-прежнему неверен, если только строка запроса не
– index.php?page=?users
, что было бы нелогично/странно, если бы это было так.
ʰᵈˑ
28 Авг 2014 в 12:16
1a) Убедитесь, что индекс page
существует
if( array_key_exists('page', $_GET) ) {
}
1b) Установите значение по умолчанию
$_GET['page'] = array_key_exists('page', $_GET) ? $_GET['page'] : '';
2) Ваше утверждение неверно
case 'users' :
//...
break;
3) Весь код вместе
$_GET['page'] = array_key_exists('page', $_GET) ? $_GET['page'] : '';
switch ($_GET['page']) {
case 'users':
//...
break;
default:
echo 'Welcome';
break;
}
Подсказки
- Убедитесь, что вы
break;
блок case. - Всегда проверяйте наличие индексов перед тем, как использовать их вслепую
4
ʰᵈˑ
28 Авг 2014 в 12:10
default
также нуждается в break;
? Это новость для меня. Ну, может быть, я никогда не ставил его, так как он всегда последний case, так что все в порядке.
Francisco Presencia
28 Авг 2014 в 12:16
2
Не использовать
– break;
. default
не нуждается в разрыве только в том случае, если это последний случай, но делать так, как я, это в основном привычка и несколько легче читать, потому что каждый случай находится в униформе ( случай -> новая строка (с отступом ) -> новая строка break
). ИДК... :P
ʰᵈˑ
28 Авг 2014 в 12:19
Я поставил последний
– break
также. Действительно, я думаю, что он необязательный. +1 за развернутый ответ.
Debflav
28 Авг 2014 в 12:21
Спасибо, @Debflav :) (Последний случай не нуждается в разрыве, и значение по умолчанию не всегда является последним - из-за странного/нелогичного написания кода)
– ʰᵈˑ
28 Авг 2014 в 12:23
Похожие вопросы
Новые вопросы
php
PHP — это широко используемый язык сценариев общего назначения с открытым исходным кодом, мультипарадигмальный, динамически типизированный и интерпретируемый, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.
$page = isset($_GET['page']) ? $_GET['page'] : '';
$_GET
нет элемента для ключаpage
, поэтому вам нужно убедиться, что там что-то есть, даже пустая строка.whatever.php?page=users
значение$_GET['page']
будетusers
НЕ?users