2009-07-16 2 views
2

У меня есть этот код, и он дает мне неопределенную ошибку, если страна не является переменной в URL. Раньше у меня никогда не было этой проблемы, поэтому это явно связано с настройками сервера, но я бы предпочел не изменять их, потому что это, вероятно, сделано для целей безопасности. Я искал Google и не могу найти обходной путь, хотя я уверен, что это ослепительно очевидно!PHP Undefined Index

$country = $_GET['country']; 

    if(!$country){ 
     $incoming = $outgoing = $sms = $free = "---"; 
    } else { 
     get_rates($country); 
    } 

ответ

14

вы должны использовать следующий подход:

if (!isset($_GET['country'])) { 
    $incoming = $outgoing = $sms = $free = "---"; 
} else { 
    get_rates($_GET['country']); 
} 
+1

На самом деле, я думаю, вы хотите, если (! Isset (...)) { –

+0

уверен, что была опечатка. Спасибо Thomas – SilentGhost

+0

И исправлено. +1. :) –

-2

Просто изменение:

$country = $_GET['country']; 

Для этого:

$country = @$_GET['country']; 

'@' является оператором, который будет удалить вывод ошибок.

+9

Это худший совет, который можно было бы дать – SilentGhost

+0

В этом случае все в порядке, потому что после этого есть чек. – FWH

+0

с помощью @ error supressor довольно вонючий запах кода, читайте о кодовых запахах на SO – markus

4

isset позволяет проверить, существует ли переменная (если мы не придаем ей значение false).

$country = isset($_GET['country'])? $_GET['country'] : false; 
2

"Undefined index" означает, что элемент не существует в массиве. Вероятно, ваш сервер должен сообщить об этих ошибках, пока вашей системы пока нет. Проверьте, существует ли элемент перед его доступом.

$country = null; 
if (!empty($_GET['country']) { 
    $country = $_GET['country']; 
} 
1

Возможно, вы должны проверить, установлен ли $ _GET ['страна']. Я бы обернул весь блок кода, который вы разместили в операторе if, который проверяет, задано ли поле страны, с помощью функции isset.