2017-04-04 60 views
0

這裏是我的代碼未定義的索引,但我不明白爲什麼

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; 
} 

請幫助。 謝謝。

+1

當您執行'&&'時,您會顯示更多代碼 –

+0

它將評估所有條件,直到出現錯誤。當你執行'||'時,它會評估所有的條件,直到事情成立。由於你的第一個條件評估爲false,第二個條件被調用,但是'_ _POST ['error']'不存在。 – Augwa

回答

0

像Augwa說:

  • 的& &運營商將評估所有條件,直到它們中的任何一個是假的。
  • ||操作員將評估所有條件,直到任何一個條件成立。

A液:

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; 
    } 
} 
2

當你& &直到東西是假的,將評估所有條件。當你做||它會評估所有條件,直到某些事情成立。由於您的第一個條件評估爲false,因此第二個條件被調用,但$_POST['error']不存在。

您可能想要這樣做,請注意圍繞您的兩個錯誤的括號。

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

它也可以更好地重寫爲。

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

謝謝大家,它解決了這個問題 – phabeon

0

你應該如下修改代碼...始終將與您||比較括號內的。因爲||條件將檢查最後一段代碼以找出「真實」值。通過重新編碼爲..... & &(... || ....),執行將從點& &返回,並且不會執行(.... || .....)部分

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; 
} 
相關問題