This may be the way my server is set up, but I'm banging my head against the wall. I'm trying to say that if $action
has no value or has a value that is not "add" or "delete" then have an error, else keep running the script. However, I get an error no matter what $action
is.
$action = $_GET['a'];
if((!isset($action)) || ($action != "add" || $action != "delete")){
//header("location:index.php");
echo "error <br>";
}
$action
is being set properly and if run something like if($action =="add")
it works. This is on my local host, so it could be a settings issue.
This question is related to
php
if-statement
conditional-operator
You're saying "if it's not set or it's different from add or it's different from delete". You realize that a != x && a != y
, with x != y
is necessarily false
since a
cannot be simultaneously two different values.
I think this is the best and easiest way to do it:
if (!(isset($action) && ($action == "add" || $action == "delete")))
No matter what $action is, it will always either not be "add" OR not be "delete", which is why the if condition always passes. What you want is to use && instead of ||:
(!isset($action)) || ($action !="add" && $action !="delete"))
For future reference, you can quickly create a truth table to check if it evaluates the way you want... it's kind of like Sudoku.
(!isset($action)) && ($action != "add" && $action != "delete"))
Example:
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
Not an answer, but just for the sake of code formatting
if((isset($_GET['a'])) $action=$_GET['a']; else $action ="";
if(!($action === "add" OR $action === "delete")){
header("location: /index.php");
exit;
}
Note the exit;
statement after header(). That's the important thing. header() does not terminate script execution.
You could also try:
if ((!isset($action)) || !($action == "add" || $action == "delete")) {
// Do your stuff
}
Source: Stackoverflow.com