php si pas d'instructions
Cela peut être le chemin de mon serveur est mis en place, mais je suis cogner ma tête contre le mur. Ce que j'essaie de faire est de dire que si $action
n'a pas de valeur ou une valeur qui n'est pas "ajouter" ou "supprimer" que d'avoir une erreur d'autre de continuer d'exécuter le script. Cependant, j'obtiens une erreur quelle que soit $action
est.
$action= $_GET['a'];
if((!isset($action)) || ($action !="add" || $action !="delete") ){
//header("location:index.php");
echo "error <br>";
}
$action
est correctement réglé et si exécuter quelque chose comme if($action =="add")
il fonctionne. C'est sur mon hôte local pourrait être un paramètre du problème.
source d'informationauteur BandonRandon
Vous devez vous connecter pour publier un commentaire.
Votre logique est un peu hors. La deuxième
||
devrait être&&
:Vous pouvez voir pourquoi votre ligne d'origine échoue en essayant une valeur de l'échantillon. Disons
$action
est"delete"
. Voici comment l'état se réduit étape par étape:Oups! La condition qui vient d'aboutir et imprimés "erreur", mais il devait à l'échec. En fait, si vous pensez à ce sujet, quelle que soit la valeur de
$action
est, l'un des deux!=
tests retournera true. Commutateur de la||
à&&
et puis la deuxième à la dernière ligne devientif (true && false)
qui se réduit àif (false)
.Il y a un moyen d'utiliser
||
et un test de dépistage du travail, par la manière. Vous devez annuler tout le reste à l'aide de De Morgan, la loi dec'est à dire:Vous pouvez lire en anglais que "si une action n'est pas (ajouter ou supprimer), puis".
N'importe quel $l'action, il sera toujours de ne pas être "ajouter" OU pas "supprimer", qui est pourquoi la condition si passe toujours. Ce que vous voulez est d'utiliser && au lieu de ||:
Vous pouvez également essayer :
Vous êtes en train de dire "si c'est pas définie ou c'est différent de d'ajouter ou c'est différent de "suppression". Vous vous rendez compte que
a != x && a != y
avecx != y
est nécessairementfalse
depuisa
ne peut pas être simultanément deux valeurs différentes.référence pour l'avenir, vous pouvez rapidement créer une table de vérité pour vérifier si il évalue la façon dont vous voulez... c'est un peu comme le sudoku.
(!isset($action)) && ($action !="add" && $action !="delete"))
exemple:
column 1 is issetaction, column 2 and 3 evaluates !="add","delete" respectively
if($a=add) T && (F && T) => T && F => FALSE
if($a=delete) T && (T && F) => T && F => FALSE
if($a=nothing) T && (T && T) => T && T => TRUE
je pense que c'est la plus simple et la meilleure façon de le faire
pas une réponse, mais juste dans un souci de mise en forme du code
note
exit;
déclaration à l'issue de l'en-tête(). c'est la chose la plus importante. l'en-tête() ne pas mettre fin à l'exécution du script