2016-06-12 51 views
-1

我想在执行重定向之前检查BOTH $ _GET条件是否为真,但是我的代码只检查第二条是否为真。

这是我有:

$url = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']; 

if (strpos($url,'this-is-an-example-post') !== false) { 
if($_GET['utm_campaign']==testing123 && $_GET['utm_source']==testing456) { 
function preserve_qs() { 
if (empty($_SERVER['QUERY_STRING']) && strpos($_SERVER['REQUEST_URI'], "?") === false) { 
    return ""; 
} 
return "?" . $_SERVER['QUERY_STRING']; 
} 
header("Location: http://example123.com/this-is-an-example-post" . preserve_qs()); 
exit; 
} 
} 

它在做什么,如果我设置utm_campaign来=是testing123本身,它不会重定向。这很好,我希望它们都需要。如果我将utm_campaign设置为= testing123并将utm_source设置为= tests456,那么它确实重定向,至今为止还不错。现在,如果我只设置了utm_source = tests456,它也会重定向,这意味着它只检查第二个条件是否为真,但我需要两者都为true或脚本退出,而且我似乎无法弄清楚为什么它没有按照它应该的方式工作。

这是在一个WordPress的header.php文件,不知道它是否有所作为。

+0

您在if语句的分支中声明'preserve_qs',所以如果它不执行,函数没有定义。除此之外,除非定义了这些常量,否则应该将'testing123'和'tests456'更改为''tests456''和''''''''。 –

+0

preserve_qs和header是相同的if语句,所以它不会发生太大的变化...... – user3528269

+0

错误报告会抛出一些关于未定义常量的东西。 http://php.net/manual/en/function.error-reporting.php –

回答

0

使用引号以防万一串

if($_GET['utm_campaign']== 'testing123' && $_GET['utm_source']=='testing456') { 
+0

实际上应该工作,因为如果这些常量没有定义,他们将分别评估为'''456456'和''456'' –

+0

工作就像一个魅力,谢谢! – Coalission

0

我认为你应该检查参数设置和格式化代码位。也不需要声明功能preserve_qs()

if (strpos($url,'this-is-an-example-post') !== false) { 

    if(isset($_GET['utm_campaign']) && isset($_GET['utm_source']) && $_GET['utm_campaign']=='testing123' && $_GET['utm_source']=='testing456') { 
     $qs = "?" . $_SERVER['QUERY_STRING']; 
     if (empty($_SERVER['QUERY_STRING']) && strpos($_SERVER['REQUEST_URI'], "?") === false) 
      $qs = ""; 

     header("Location: http://example123.com/this-is-an-example-post" . $qs); 
     exit; 

    } 

} 
+0

谢谢,我现在用这种方法清理它。 – Coalission

+0

@ Coalission您的欢迎:) –

相关问题