phabeon
phabeon

Reputation: 5

undefined index but i can't understand why

Here is my code

if (isset($_POST['error']) && $_POST['error'] != 2 && $_POST['error'] != 1) {
    return true;
} else if (isset($_POST['error']) && $_POST['error'] == 2 || $_POST['error'] == 1) {
    return false;
} else {
    return false;
}

Please help. Thanks.

Upvotes: 0

Views: 58

Answers (3)

Mahesh
Mahesh

Reputation: 38

you should change your code as below... always enclose your comparison with || in brackets. because || condition checks up to last piece of code to find out a 'true' value. by re-coding as ..... && (... || .... ), the executions will return from the point && and will not execute ( .... || ..... ) part

if (isset($_POST['error']) && $_POST['error'] != 2 && $_POST['error'] != 1) {
    return true;
} else if (isset($_POST['error']) && ($_POST['error'] == 2 || $_POST['error'] == 1)) {
    return false;
} else {
    return false;
}

Upvotes: 0

FrenchMajesty
FrenchMajesty

Reputation: 1139

Like Augwa said:

  • The && operator will evaluate all conditions until any one of them is false.
  • The || operator will evaluate all conditions until any one of the is true.

A solution:

if(isset($_POST['error'])) {

    if($_POST['error'] != 2 && $_POST['error'] !=1) {
        // Do stuff here
        return true;
    }else if($_POST['error'] == 2 || $_POST['error'] == 1) {
        return false;
    } else {
        return false;
    }
}

Upvotes: 0

Jonathan
Jonathan

Reputation: 2877

When you do && it will evaluate all conditions until something is false. When you do || it will evaluate all conditions until something is true. Since your first conditions evaluated to the false, the 2nd one was invoked but $_POST['error'] didn't exist.

You probably want to do this, notice the brackets around your two errors.

if(
    isset($_POST['error']) &&
    (
        $_POST['error'] == 2 ||
        $_POST['error'] == 1
    )
)

It can also be better re-written as.

if(
    isset($_POST['error']) &&
    in_array($_POST['error'], array(1,2))
)

Upvotes: 2

Related Questions