2012-06-03 55 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是你的权利,谢谢 –