2016-11-26 1 views
0

J'essaie de vérifier si le premier $_COOKIE['one'] existe OU le second $_COOKIE['two'] existe et s'il n'existe aucun pour rediriger l'utilisateur.PHP If (! Isset (...) ||! Isset (...))

Un seul de ces deux témoins vont exister lorsque ce script est en cours d'exécution. J'ai essayé beaucoup de choses mais chaque fois que j'y arrive, même si l'un de ces cookies existe toujours.

+5

utilisation ET (&&) non OU (||) –

+0

Mark était plus rapide. – Phiter

+0

* "J'ai essayé beaucoup de choses mais chaque fois que j'en ai l'occasion, si l'un de ces cookies existe toujours." * - Le mot clé ici est "ou" et votre code fonctionne exactement comme écrit. –

Répondre

3

Ceci est un cas simple de logique inversée. Comme l'a souligné Mark, vous devez utiliser l'opérateur booléen & & (ET). Vous essayez de voir si les deux n'existent pas, puis envoyez l'en-tête. Actuellement, si l'un existe, vous envoyez l'en-tête de toute façon.

il suffit de changer if (!isset($_COOKIE['one']) || !isset($_COOKIE['two'])) {

à

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

Ou (||) retourne true si la gauche ou à droite de l'énoncé est vrai. Et (& &) retourne vrai que si les deux parties de la déclaration sont vraies. L'opérateur Not (!) Inverse true-> false et false-> true.

isset vous indique si le cookie existe. Si le cookie existe, il retourne vrai. Vous avez raison à l'aide pas, comme vous le voulez pour vous dire si le cookie n'existe pas (ci-contre). Cependant, vous ne voulez envoyer l'en-tête que si les deux cookies n'existent pas. Ou l'enverra s'il n'en existe pas.

+0

Ce n'est pas un défaut logique booléen. Il vient d'inverser la logique qu'il veut. – Phiter

+0

@PhiterFernandes mon mauvais. Fixé. –

+0

Yeap, je n'ai pas traduit le code que j'ai écrit, correctement dans ma tête, merci. –

1

Si seulement l'un des cookies jamais être mis alors alors votre if condition sera toujours vrai si la redirection se produira.

changement || pour &&,

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

Vous avez écrit une logique opposée à ce que vous voulez vraiment.

Vous avez dit que


Vous essayez de vérifier si

C'est une if conditionnelle.

la première $_COOKIE['one'] existe

Pour que vous utilisez isset, que vous avez fait et il est vrai.

OU la deuxième $_COOKIE['two']exists

donc vous devriez utiliser l'opérateur OR (||)

et si aucune existe pour rediriger l'utilisateur.

C'est un else, puis d'utiliser header pour rediriger.


Conversion au code littéral vos mots, vous auriez ceci:

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

Votre code fonctionne aussi avec le correctif fourni par Mark dans les commentaires, mais pourrait vous confondre dans l'avenir .. .

Vous pouvez aussi le faire pour éviter la nidification:

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

//... Do your thing