PHP中的复杂条件

时间:2014-01-01 10:24:57

标签: php

如果用户来自另一个地址而不是bonaca,或者如果他输入的是1405或999以外的其他通行证,我需要执行重定向。

以下代码无法正常运行。

$referrer = $_SERVER['HTTP_REFERER'];

if (!(preg_match("/bonaca.net46.net/",$referrer))
or
!($_POST['pass'] == 1405
or
!$_POST['pass'] == 999)

 {
      header('Location: index.php');
};

2 个答案:

答案 0 :(得分:1)

来自http://php.net/preg_match

  

如果您只想检查另一个字符串中是否包含一个字符串,请不要使用preg_match()。使用strpos()或strstr()代替它们会更快。

根据您的评论:如果推荐人不包含bonaca.net46.net或密码不是1405或999

,则以下情况属实
$referrer = $_SERVER['HTTP_REFERER'];

if (strpos($referrer, "bonaca.net46.net") === FALSE
    || !($_POST['pass'] == 1405 || $_POST['pass'] == 999)
   )
{
      header('Location: index.php');

};

答案 1 :(得分:0)

我会使用一些临时变量来减少条件:

$userFromBonaca = isset($_SERVER['HTTP_REFERER']) && strcasecmp(parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST) , 'bonaca.net46.net') == 0;
$validPass = isset($_POST['pass']) && in_array($_POST['pass'], [1405, 999]);

if (!($userFromBonaca || $validPass)) {
    header('Location: index.php');
}