假设我有一些像这样的代码
if(isset($_GET['foo']))
//do something
if(isset($_GET['bar']))
//do something else
如果用户在example.com/?foo=abc并点击链接设置bar = xyz,我想轻松将它们带到example.com/?foo=abc&bar=xyz,而不是示例的.com /?巴= XYZ。
我可以想到一些非常混乱的方法来做到这一点,但我确信有一些我不了解的东西,并且无法通过Google追踪。
答案 0 :(得分:2)
这是一种方式......
//get passed params
//(you might do some sanitizing at this point)
$params=$_GET;
//morph the params with new values
$params['bar']='xyz';
//build new query string
$query='';
$sep='?';
foreach($params as $name=>$value)
{
$query.=$sep.$name.'='.urlencode($value);
$sep='&';
}
答案 1 :(得分:1)
如果您要更新查询字符串,则需要确保不要执行
之类的操作$qs="a=1&b=2";
$href="$qs&b=4";
$href contains "a=1&b=2&b=4"
如果需要,您真正想要的是覆盖当前密钥。 你可以使用这样的功能。 (免责声明:脱离我的头顶,可能会有些小问题)
function getUpdateQS($key,$value)
{
foreach ($_GET as $k => $v)
{
if ($k != $key)
{
$qs .= "$k=".urlencode($v)."&"
}
else
{
$qs .= "$key=".urlencode($value)."&";
}
}
return $qs
}
<a href="reports.php?<?getupdateqs('name','byron');?">View report</a>
答案 2 :(得分:0)
如果foo已经设置,只需将更改栏的链接设置为xyz,也可以设置foo = abc。
$link = ($_GET['foo'] == 'abc') ? 'foo=abc&bar=xyz' : 'bar=xyz';
?>
<a href="whatever.php?<?= $link ?>">Click Me</a>
答案 3 :(得分:0)
您必须使用正确的URL查询字符串呈现链接才能实现此目的。这是您需要根据系统设置方式做出的设计决策。
我有一些网站存在此问题,我所做的是设置查询字符串全局变量,将当前页面数据设置为页面请求的顶部。
然后当我渲染页面时,如果我需要使用当前的查询字符串,我会做类似的事情:
echo '<a href="myurl.php' . querystring . '&bar=foo';
这不是最干净的,但这一切都取决于你的系统如何运作。
答案 4 :(得分:0)
保存一些代码并使用内置的http_build_query。我在我的一个项目中使用了这个包装器:
function to_query_string($array) {
if(is_scalar($array)) $query = trim($array, '? \t\n\r\0\x0B'); // I could split on "&" and "=" do some urlencode-ing here
else $query = http_build_query($array);
return '?'.$query;
}
此外,尽管不经常使用,但您可以在作业的左侧使用$ _GET:
$_GET['overriden_or_new'] = 'new_value';
echo '<a href="'.to_query_string($_GET).'">Yeah!</a>';
除此之外,只要做保罗迪克森所说的话。