2012-07-29 84 views
-3

我想将一个变量(foo=bar)传递给URL。
如果URL已经有一个变量,那么foo应附加到当前的URL &foo=bar
但是,如果地址栏不具有任何变量,那么当前的网址应该以?foo=bar如何检查是否有任何变量通过URL传递?

被追加所以,我怎么可以检查任何变量是否存在于当前URL或不?

+1

你可以列出你的问题,也许提供了你在做什么的例子,什么是失败?现在很难理解。 – DCoder 2012-07-29 10:49:26

回答

0

在URL中传递的变量称为GET参数。您可以使用$_GET阵列通过PHP检索它们。

给出的URL - http://mycoolsite.com?foo=bar&stack=overflow

做一个print_r()$_GET会给你 -

Array ( 
    [foo] => bar 
    [stack] => overflow 
) 

一旦你有了这个数组,你可以使用in_array()功能测试某个变量的存在。

if (in_array('foo',$_GET)){ 
    // the foo variable is was passed 
} 

或者,你可以简单地遍历所有你传递的参数和检验,则这种方式 -

foreach($_GET AS $key=>$value){ 
    // $key = the name of the variable 
    // $value = the value of the variable 
} 

资源

+0

但我不知道哪个变量通过了 – Divya 2012-07-29 10:40:38

+0

@div - 检查我的更新。您可以使用'in_array()'函数... – Lix 2012-07-29 10:43:55

+2

@Lix:考虑到提及'?'和'&'的问题,它可能会将附加参数*传递到正在构建的URL中。 'echo $ my_base_url。 '?foo ='。如果$ my_base_url已经包含查询字符串,则urlencode($ bar)'将不正确。 – DCoder 2012-07-29 10:48:13

0

我想你想要将var = foo和stack = overflow变量传递给当前URL。换句话说,你想将用户重定向到当前地址+你的新变量。你可以试试这个:

$url = 'http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; 
if(strpos("?", $url) !== FALSE){ 
    $url .= "&var=foo&stack=overflow"; 
}else{ 
    $url .= "?var=foo&stack=overflow"; 
} 

header("Location: ".$url); 
exit(); 

它得到当前的URL,检查是否已经在它?。如果是,则它将var &堆栈附加到&,否则相应地?&

+1

我喜欢你选择的变量;) – Lix 2012-07-29 11:46:49

0

正确的方法是:

$url = 'http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; 
    if(strpos($url, "?") !== FALSE){ 
      $url .= "&var=foo&stack=overflow"; 
}else{ 

$url .= "?var=foo&stack=overflow"; 
} 

header("Location: ".$url); 
exit(); 

strpos相反的顺序;) 这是一个例子:

$mystring = 'abc'; 
$findme = 'a'; 
$pos = strpos($mystring, $findme);