противоречия php с $ _POST

#php #array-key-exists

#php #array-key-exists

Вопрос:

У меня есть эта программа:

 if (!isset($_POST['foo'])) doSomeThing1();
else {
    if (!array_key_exists('foo',$_POST)) doSomeThing2();
    else doSomeThing3();
}
 

но… поток программы переходит к 3-му случаю, завершаясь ошибкой: undefined index 'foo' (in file.php, line xxx) .

Не могли бы вы объяснить, почему? Почему array_key_exists возвращает true (который переводит скрипт в 3D-регистр), но впоследствии это «неопределенный индекс»?

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

1. вы пробовали просматривать свои данные с помощью a var_dump($_POST) ? это тоже может помочь нам в отладке. также — что в file.php: xxx? код, выдающий ошибку, может иметь отношение к отладке ошибки, не так ли?

2. Пожалуйста print , сначала укажите значение post, даже если вы можете использовать var_dump() его для определения того, какие именно данные поступают и почему они не соответствуют никаким условиям.

3. Что подразумевается под doSomeThing3() ?

4. Пожалуйста, дайте нам знать, чего вы ожидаете, когда в $ _POST есть ключ foo; Когда в $ _POST нет ключа foo и т. Д

5. Спасибо, хорошего дня

Ответ №1:

 if (!isset($_POST['foo'])) doSomeThing1();
else {
    if (!array_key_exists('foo',$_POST)) doSomeThing2();
    else doSomeThing3();
}
 

Согласно этому коду, как это работает…

!isset($_POST['foo']) ==> возвращает true и выполняет dosomeThing1() , когда 'foo' в массиве НЕТ ключа $_POST

если $_POST у него нет никакого ключа, он проверяет !array_key_exists('foo',$_POST)

array_key_exists('foo', $_POST) проверка наличия 'foo' ключа в $_POST массиве или нет. array_key_exists('foo', $_POST) то же isset($_POST['foo']) самое, что и so, оно всегда выполняется doSomeThing3() , когда 'foo' в массиве нет ключа $_POST .

Надеюсь, это объяснение поможет.