Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php if语句返回false,即使它是';不是_Php_If Statement - Fatal编程技术网

Php if语句返回false,即使它是';不是

Php if语句返回false,即使它是';不是,php,if-statement,Php,If Statement,我这里有一个小片段,它返回false,即使它满足if语句 $urls = $_POST['links']; trim($urls); $urls = explode("\r\n",$urls); foreach($urls as $url){ trim($url); if(strpos($url,'http://') === false) $url = 'http://'.$url; $parse = parse_url($url, PHP_URL

我这里有一个小片段,它返回
false
,即使它满足
if
语句

$urls = $_POST['links'];
    trim($urls);
$urls = explode("\r\n",$urls);
foreach($urls as $url){
    trim($url);
    if(strpos($url,'http://') === false)
        $url = 'http://'.$url;
    $parse = parse_url($url, PHP_URL_HOST);
    if(($parse != 'site.com') || ($parse != 'www.site.com')) //problem here
        echo 'false:'.$parse.'<br>';
    else
        echo 'true:'.$parse;
}
输出:

true:site.com
true:site.com
false:www.site.com
false:www.site.com

你认为问题出在哪里?

我不确定你的真正意图,但下面这句话肯定是错的:

    if(($parse != 'site.com') || ($parse != 'www.site.com')) //problem here
这将始终返回true,因为如果parse不是'site.com',则为true,但如果parse不是'www.site.com',则为true,并且由于不能同时为两者,因此必须始终为true。你是说&&而不是| |?即逻辑AND而不是逻辑OR

if(($parse != 'site.com') && ($parse != 'www.site.com')) 
编辑:实际上,如果您在问题中提出的是期望的行为,即site.com为true,www.site.com为false,那么您只需要:

if ($parse == 'site.com')
{
    echo 'false:'.$parse;
}
else if ($parse == 'www.site.com')
{
    echo 'false:'.$parse;
}

或者这不是你真正想要的…

我不确定你真正想要的是什么,但下面这句话肯定是错的:

    if(($parse != 'site.com') || ($parse != 'www.site.com')) //problem here
这将始终返回true,因为如果parse不是'site.com',则为true,但如果parse不是'www.site.com',则为true,并且由于不能同时为两者,因此必须始终为true。你是说&&而不是| |?即逻辑AND而不是逻辑OR

if(($parse != 'site.com') && ($parse != 'www.site.com')) 
编辑:实际上,如果您在问题中提出的是期望的行为,即site.com为true,www.site.com为false,那么您只需要:

if ($parse == 'site.com')
{
    echo 'false:'.$parse;
}
else if ($parse == 'www.site.com')
{
    echo 'false:'.$parse;
}

或者,这可能不是您真正想要的…

想想您在第二条if语句中使用的逻辑。无论
$parse
是什么,您总是会陷入
if
分支。(也就是说,您永远不会陷入
else
分支。)

考虑以下备选方案:

// "Not A AND Not B"
if(($parse != 'site.com') && ($parse != 'www.site.com'))
// ...

// "Neither A nor B"
if(!(($parse == 'site.com') || ($parse == 'www.site.com')))
// ...

// "Either A or B"
if(($parse == 'site.com') || ($parse == 'www.site.com'))
    echo 'true:'.$parse;
else
    echo 'false:'.$parse.'<br>';
// Note here we also swapped the two branches.
/“不是A也不是B”
如果(($parse!='site.com')&($parse!='www.site.com'))
// ...
//“既不是A也不是B”
如果(!($parse=='site.com')| |($parse=='www.site.com'))
// ...
//“A或B”
如果($parse=='site.com')||($parse=='www.site.com'))
回显“true:”。$parse;
其他的
回显“false:”.$parse.“
”; //注意这里我们还交换了两个分支。
考虑一下在第二条if语句中使用的逻辑。无论
$parse
是什么,您总是会陷入
if
分支。(也就是说,您永远不会陷入
else
分支。)

考虑以下备选方案:

// "Not A AND Not B"
if(($parse != 'site.com') && ($parse != 'www.site.com'))
// ...

// "Neither A nor B"
if(!(($parse == 'site.com') || ($parse == 'www.site.com')))
// ...

// "Either A or B"
if(($parse == 'site.com') || ($parse == 'www.site.com'))
    echo 'true:'.$parse;
else
    echo 'false:'.$parse.'<br>';
// Note here we also swapped the two branches.
/“不是A也不是B”
如果(($parse!='site.com')&($parse!='www.site.com'))
// ...
//“既不是A也不是B”
如果(!($parse=='site.com')| |($parse=='www.site.com'))
// ...
//“A或B”
如果($parse=='site.com')||($parse=='www.site.com'))
回显“true:”。$parse;
其他的
回显“false:”.$parse.“
”; //注意这里我们还交换了两个分支。
将if行更改为:

if(($parse != 'site.com') && ($parse != 'www.site.com'))
将if行更改为:

if(($parse != 'site.com') && ($parse != 'www.site.com'))
替换此行:

if(($parse != 'site.com') && ($parse != 'www.site.com'))
替换此行:

if(($parse != 'site.com') && ($parse != 'www.site.com'))

给你一个小提示:你可以在GET和POST参数中使用数组,例如var[0]=abc&var[1]=def你的分解结构有点不安全。@peipst9lker对不起,我没有理解你的意思,你能解释一下吗?@peipst9lker我不确定这是否有帮助,因为这4行似乎都来自同一个文本区域。我也不确定爆炸是否像你建议的那样不安全。然而,我确实认为他应该使用“\n”作为分隔符,而不是“\r\n”。你应该建议一种安全的方法吗?@peipst9lker@jedwards我看到了一个,他建议给你一个小提示:你可以在GET和POST参数中使用数组,例如var[0]=abc&var[1]=def你的分解结构有点不安全。@peipst9lker抱歉,我没有理解你的意思,你能解释一下吗?@peipst9lker我不确定这是否有用,因为这四行似乎都来自同一个文本区域。我也不确定爆炸是否像你建议的那样不安全。然而,我确实认为他应该使用“\n”作为分隔符,而不是“\r\n”。你应该建议一种安全的方法吗?@peipst9lker@jedwards我看到了一个,他推荐了
\r\n
我在想什么?我的逻辑很差。谢谢我在想什么?我的逻辑很差。谢谢