2017-02-17 77 views
0

我有一個聲明,檢查頁面的URL並相應地標記頁面,但它只適用於我的if語句有一個選項來檢查。PHP條件語句不起作用

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

<?php if (strpos($url, 'events/eventname')!= false) { ?> 
    ~markup~ 
<? } ?> 

如果我修改它來檢查兩個可能的URL ...

<?php if (strpos($url, 'events/eventname')!= false) { ?> 
    ~markup~ 
<? }else if (strpos($url, 'events/othereventname')!= false) { ?> 
    ~markup~ 
<? } ?> 

...頁面將不會加載。我必須錯過一些明顯的東西 - 有人能告訴我這個函數有什麼問題嗎?

*編輯:既然有人要求我已經包括$ url變量和更具體的網址例子

+1

URL在哪裏定義?而且,那些「urlhere」或「otherurlher」是什麼?這些信息可能會讓開發人員理解您的代碼。 – Ad5001

+0

嘗試!==而不是!=。關於PHP文檔:警告 此函數可能會返回布爾FALSE,但也可能會返回一個非布爾值,其值爲FALSE。有關更多信息,請閱讀布爾部分。使用===運算符來測試此函數的返回值。 (http://php.net/manual/en/function.strpos.php) –

+0

@ Ad5001 Gameur codeur autre URL在代碼的其他地方定義 - 我沒有包含它或實際的URL(我用URLhere和其他地方),因爲它與問題沒有直接關係。 –

回答

2

strpos返回0,當搜索字符串是查詢字符串的開頭。您可以將!=替換爲!==以使其正常工作 - 否則php會在內部將false轉換爲零,從而導致錯誤的比較結果。

例如:

<?php 
var_dump(strpos('aaa', 'a')); 
echo var_dump(strpos('aaa', 'a') === false); 
echo var_dump(strpos('aaa', 'a') == false); 
+0

感謝您的答案,但它似乎沒有工作。 –

-2

而不是使用strpos()你可以得到請求URI是域名後什麼(即:www.example.com/foo/bar會給你/富/酒吧)。

$url = $_SERVER['REQUEST_URI']; 

if($url == "/foo/bar") { 
    // markup 
} elseif($url == "/bar/foo") { 
    // markup 
} else { 
    // markup 
} 
1

嘗試使用!==比較只是以防萬一字符串在位置0

另一個語法問題是else if,而你應該使用elseif

嘗試將短php標記<?更改爲全滿<?php

+0

感謝您的答案Chris Cynarski,但這些更正都沒有解決問題。 –

+0

嘗試使用完整的php標籤'<?php'而不是簡短的'<?'。 –

+0

如果短標籤沒有啓用,第一個也不會有效。 –