如果陈述表现得很奇怪

时间:2015-04-20 08:03:37

标签: php

我有2个网址说

http://localhost/xyz?language=en
http://localhost/xyz?language=es

我想检查语言参数是否包含en / es以外的内容,然后它应该重定向到某些http://localhost/xyz/errorpage

为此,我有以下代码:

if(isset($_GET['language'])){
    if(($_GET['language'] !== "en") || ($_GET['language'] !== "es")){
        header('Location: /xyz/errorpage'); 
    }
} 

但实际上,当我执行2个网址中的任何一个或将language参数的值设置为与en / es不同的内容时:

http://localhost/xyz?language=en
http://localhost/xyz?language=es
http://localhost/xyz?language=esdfsdf

我被重定向到errorpage

无法理解代码的问题。

3 个答案:

答案 0 :(得分:5)

替换||由&&。

原因: 您只有在不是en而不是es时才会重定向。

答案 1 :(得分:4)

将if语句更改为&&而不是||,否则您的条件将始终为false。

if(isset($_GET['language'])){
    if($_GET['language'] !== "en" && $_GET['language'] !== "es"){
        header('Location: /xyz/errorpage'); 
    }
} 

答案 2 :(得分:4)

你的情况不好,或者更好,操作员。

使用&&代替||in_array()

if(($_GET['language'] !== "en") && ($_GET['language'] !== "es")) {

使用in_array()功能:

if (!in_array($_GET['languge'], array('en', 'es'))) {
    header ();
}

条件if ($a != 'x' || $a != 'y')始终为true,条件的第一部分或第二部分为真。没有别的办法。