2016-06-12 50 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您的歡迎:) –

相關問題