2010-04-19 4 views
7

Если вы попытаетесь прочитать значение переменной «get», что произойдет, если указанная переменная не была задана в URL-адресе. Пример: вы запрашиваете страницу test.php, в этом файле она пытается прочитать значение $_GET['message']. Что происходит в этом случае? доза значение только что возвращается как ''?Чтение PHP переменной «get», которая может быть установлена ​​или не установлена ​​

Означает ли это, что если я всегда ожидал значение, которое будет введено, и я не готов принять значение «», что я могу просто сделать что-то вроде

$foo = $_GET['bar']; 
if($foo == ''){ 
    // Handle my 'error' 
} 
else 
{ 
    // $foo should now have a value that I can work with 
} 

Пожалуйста, имейте в виду, я знаю, что я мог бы использовать isset($_GET['bar']) Но я не просто хочу знать, установлено ли это, меня это не волнует, если это так или нет, мне просто интересно, имеет ли оно значение, которое больше, чем просто пустая строка.

+0

ооо, что я сделал я с моими тегами: PI пытался написать «$ _GET» – thecoshman

ответ

7

Если вам не важно, действительно ли значение установлено, вы можете использовать это:

if (empty($_GET['bar'])) 
    // value is null, false, 0, '0' or an empty string (including whitespace). 
+0

Я считаю, что это идеальное решение моих потребностей. Так что это НЕ будет генерировать ошибку, если '$ _GET ['bar']' даже не был установлен в первую очередь. – thecoshman

+0

Я думаю, что важно указать, что это будет считать строку '' 0'' пустой. Если вы используете это как идентификатор для загрузки страниц, это может вызвать проблемы. Я действительно верю, что большинство баз данных запускают автоматические номера для столбца ID по адресу 1 – thecoshman

+0

да, добавили это в ответ. – elias

0

Если я правильно понимаю, это:

$foo = $_GET['bar']; 
if ((!isset($foo)) || $foo == '') { 
//GET veriable not set, error 
} 
else { 
// GET veriable set, code here. 
} 
+0

Но в этом коде , Мне все равно придется проверять, '' foo == '' 'Я хочу попробовать и сделать это за один раз. – thecoshman

6

Если вы попробуете и доступ к элементу массива, который не существует, то результат будет null.

$foo = $_GET['bar']; //$foo is now null 

Стоит отметить, что если вы используете слабый comparison operator==, а не строгой сравнительную ===, то '' будет рассматриваться как нуль.

Недостатком вышеуказанного кода является то, что он будет генерировать уведомление при доступе к массиву с индексом, который не существует, который является немного грязным.

Следовательно, вы должны проверить, установлено ли значение перед назначением переменной.

if (!isset($_GET['bar'])){ 
    //handle error or assign default value to $foo 
}else{ 
    $foo = $_GET['bar']; 
} 

Если вы хотите, чтобы иметь значение по умолчанию, и только заменить значения по умолчанию, если значение $ _GET существует, вы можете использовать conditional operator (прокрутите вниз до «троичного оператора»)

$foo = isset($_GET['bar']) ? $_GET['bar'] : 'default value'; 
1

Вот как я это делаю.

$foo = (isset($_GET['bar'])) ? $_GET['bar'] : false; 

if(false === $foo){ 
    die('no Foo for your Bar'); 
} 

В качестве стороны, вы, вероятно, не получите истинное логическое значение из $ _GET

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