2011-12-28 39 views
0

我正在做一个网站。有一个分页,你点击链接,他们带你到你需要的页面,链接通过$_GET变量(a href="?pn=2"),这工作正常。

然而,当我加入的类别链接(也包含$_GET可变 (a href="?sort=english")在同一个页面,哪种类型的页面上的内容,并点击它,系统只是简单地重写的URL,并删除所有以前的。$_GET

例如,我第2页(http://website.com/index.php?pn=2) ,然后我点击这个链接排序,什么我期望得到的是这个(http://website.com/index.php?pn=2&sort=english),但我所得到的是这样的: (http://website.com/index.php?sort=english)。它简单地覆盖了之前的$_GET,而不是添加到它!

+1

对于未来的知识:它们被称为*查询参数*,而不是'$ _GET'。这就是你如何访问它们。 –

+0

先去学习一些基础知识 –

+0

阅读'http_build_query' – diEcho

回答

-1

您需要在创建新链接时维护查询参数。页面上的链接应该是这样的:

<a href="?pn=<?= $_GET['pn'] ?>&sort=english">Sort by English</a> 

HTTP协议是无状态的 - 它不记得过去。你必须提醒它以前的HTTP参数是通过PHP还是其他方法(cookie等)。在你的情况下,你需要提醒它当前的页码是什么,就像上面的例子。

+1

这是无效的(HTML'&'具有特殊含义),并使网站暴露于[XSS安全漏洞](http://en.wikipedia.org/wiki/Cross-site_scripting)。 – Quentin

+0

这与眼前的问题无关。我试图解释为什么他的查询字符串不正确,并提供了一个示例来显示新查询字符串的外观。 HTML有效性和XSS安全漏洞不是问题的主题。 – Jemaclus

+0

只要您提供了打开漏洞的示例代码,XSS安全漏洞就变得相关。代码的无效性同上。 – Quentin

4

仅由查询字符串组成的相对URI将替换整个现有的查询字符串。没有办法编写将添加到现有查询的URL。你必须编写你想要的完整查询字符串。

您可以通过明确将其维持现有的字符串:

href="?foo=<?php echo htmlspecialchars($_GET['foo']); ?>&amp;bar=123" 
+0

非常感谢!)) –

0

您可以创建一个将通过您的$_GET阵列迭代,并创建一个查询字符串的函数。然后,您只需更改您的$_GET数组并生成此查询字符串。

伪代码(斜线我真的不知道PHP,但这里是你应该能够遵循一个很好的例子):

function create_query_string($array) { 
    $kvps = array(); 
    for ($key in $array) { 
     array_push($kvps, "$key=$array[$key]"); 
    } 

    return "?" . implode("&", $kvps); 
} 

用法:

$_GET["sort"] = "english"; 
$query_string = create_query_string($_GET); 
1

尝试使用这样的:

$_SERVER['REQUEST_URI']; 

this link你可以看到例子。并在this link我上传了测试文档,您可以自己尝试,它只是从上面打印出这一行。

编辑:虽然这可以帮助您获取URL中的当前参数,但我认为这不是您的解决方案。就像Quentin说的那样,你将不得不手动编写完整的链接并维护每个参数。