2012-06-03 95 views
6

可能重複:
keeping url parameters during pagination檢查URL包含參數

我想一個參數添加到與PHP當前的URL,但我怎麼知道,如果網址已包含參數?

實施例:

foobar.com/foo/bar/index.php => foobar.com/foo/bar/index.php?myparameter=5 foobar.com/index.php?foo=7 => foobar.com/index.php?foo=7 & myparameter = 5

主要問題是我不知道是否需要添加「?」。

我的代碼(發現它的地方,但它不工作):

<?php if(/?/.test(self.location.href)){ //if url contains ? 
    $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]&myparameter=5"; 
} else { 
    $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]?myparameter=5"; 
}?> 
+1

@Pyyol,你不應該使用常量作爲數組鍵,而是用大括號括起來或者打破字符串和連接。 '「HTTP:// {$ _ SERVER [ 'HTTP_HOST']} ...「' –

回答

20

的URL參數和一個名爲$_GET全局變量這實際上是一個陣列接收。因此,要知道URL是否包含參數,可以使用isset()函數。

if (isset($_GET['yourparametername'])) { 
    //The parameter you need is present 
} 

病房後,你可以創建單獨的這樣的參數陣列,你需要附加到一個URL。像

if(isset($_GET['param1'])) { 
    \\The parameter you need is present 
    $attachList['param1'] = $_GET['param1']; 
} 
if(isset($_GET['param2'])) { 
    $attachList['param2'] = $_GET['param2]; 
} 

現在,知道與否,你需要一個?符號,算了算這陣

if(count($attachList)) { 
    $link .= "?"; 
    // and so on 
} 

更新:

要知道,如果任何參數設置,只需計算$_GET

if(count($_GET)) { 
    //some parameters are set 
} 
+0

我不想知道我的參數是否設置,我想知道是否設置了任何參數 – Puyol

+2

@Pyyol,實際上看到更新 – Starx

+0

,它仍然有可能有這樣的網址:http:// example .com /?所以這樣沒有參數,但他仍然不應該添加?char –

4

你可以搜索'?'炭這樣的:

if (strpos($_SERVER[REQUEST_URI], '?')) { // returns false if '?' isn't there 
    $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]&myparameter=5"; 
} else { 
    $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]?myparameter=5"; 
} 
+0

或簡而言之, '<?php echo「http: ((strpos($ _ SERVER ['REQUEST_URI'],'?'))?'&':'?')。「myparameter = 5」'。 謝謝 –

15

真的是你應該使用parse_url()功能:

<?php 
$url = parse_url($_SERVER['REQUEST_URI']); 

if(isset($url['query'])){ 
    //Has query params 
}else{ 
    //Has no query params 
} 
?> 

你也應該用花括號中的基於陣列的變量或打出來的字符串:

$url = "http://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}?myparameter=5";

$url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."?myparameter=5";

啓用error_reporting(E_ALL);您將看到該錯誤。注意:使用未定義的常量REQUEST_URI - 假定爲'REQUEST_URI'ect

+0

通過使用PHP_URL_PATH作爲parse_url的第二個參數,它不會傳遞$ url ['query'],所以您的isset($ url ['query'])將始終爲false。只需將PHP_URL_PATH作爲第二個參數param正確工作,謝謝你的回答,因爲當我們沒有$ _GET時,它對我來說更有意義即 – Chris

+0

@Chris是你的權利,謝謝 –