2016-11-26 9 views
0

Я пытаюсь проверить, существует ли первый $_COOKIE['one'] ИЛИ существует второй $_COOKIE['two'], и если для перенаправления пользователя не существует.PHP Если (! Isset (...) ||! Isset (...))

Только одно из этих двух файлов cookie будет существовать при запуске этого скрипта.

if (!isset($_COOKIE['one']) || !isset($_COOKIE['two'])) { 
    header('Location: ./'); 
} else { 
    ... 
} 

Я пробовал много вещей, но каждый раз, когда я вхожу в это, если хотя бы одно из этих куков всегда существует.

+5

пользования и (&&) не OR (||) –

+0

Марк был быстрее. – Phiter

+0

* «Я пробовал много вещей, но каждый раз, когда я вникаю в это, если хотя бы одно из этих куков всегда существует». * - Оперативное слово здесь «или», и ваш код работает точно так же, как написано. –

ответ

3

Это простой случай перевернутой логики. Как отметил Марк, вам нужно использовать оператор boolean & & (AND). Вы пытаетесь выяснить, существуют ли оба из них, а затем отправить заголовок. В настоящее время, если он существует, вы все равно отправляете заголовок.

Просто измените if (!isset($_COOKIE['one']) || !isset($_COOKIE['two'])) {

в

if (!isset($_COOKIE['one']) && !isset($_COOKIE['two'])) {

Или (||) возвращает истину, если либо слева или справа утверждение верно. И (& &) возвращает true, только если обе части утверждения верны. Оператор Not (!) Меняет true-> false и false-> true.

isset сообщает, существует ли файл cookie. Если файл cookie существует, он возвращает true. Вы правы в использовании не на этом, так как вы хотите, чтобы он рассказал вам, существует ли файл cookie (напротив). Однако вы хотите отправить сообщение только в том случае, если файлы cookie BOTH не существуют. Или отправит его, если его не существует.

+0

Это не ошибка логической логики. Он просто перевернул логику, которую он хочет. – Phiter

+0

@PhiterFernandes мой плохой. Исправлена. –

+0

Yeap, я не перевел код, который я написал, правильно в моей голове, спасибо. –

1

Если будет установлено только одно из файлов cookie, тогда ваше состояние if всегда будет истинным, поэтому произойдет перенаправление.

Изменение || для &&,

if (!isset($_COOKIE['one']) && !isset($_COOKIE['two'])) { 
    header('Location: ./'); 
} else { 
    // 
} 
2

Вы написали противоположную логику тому, что вы действительно хотите.

Вы сказали, что


Вы пытаетесь проверки, если

Это if условно.

первый $_COOKIE['one'] существует

За то, что вы используете isset, которые вы сделали, и это правильно.

ИЛИ второй $_COOKIE['two']exists

Таким образом, вы бы использовать оператор OR (||)

и если он не существует для перенаправления пользователя.

Это else, а затем используйте header для перенаправления.


Преобразования ваших слов в буквальный код, вы бы это:

if (isset($_COOKIE['one']) || isset($_COOKIE['two'])) { 
    //... Do your thing 
} else { 
    header('Location: ./'); 
} 

Ваш код работает с исправлением предоставленного Марком в комментариях, но может запутать вас в будущем .. .

Вы также можете сделать это, чтобы избежать вложенности:

if (!(isset($_COOKIE['one']) || isset($_COOKIE['two']))) { 
{ 
    header('Location: ./'); exit; 
} 

//... Do your thing