多个$ _GET通过链接

时间:2011-12-28 21:04:02

标签: php html

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

但是,当我添加类别链接(还包含$_GET变量时 (a href="?sort=english")在同一页面上,对页面上的内容进行排序,然后点击它,系统会简单地覆盖网址并删除之前的所有$_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,而不是添加到它!

4 个答案:

答案 0 :(得分:4)

仅由查询字符串组成的相对URI将替换整个现有查询字符串。无法编写将添加到现有查询的URL。您必须编写所需的完整查询字符串。

您可以通过显式添加来维护现有字符串:

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

答案 1 :(得分:1)

尝试使用:

$_SERVER['REQUEST_URI'];

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

编辑:虽然这可以帮助您获取URL中的当前参数,但我认为它不适合您。像Quentin所说,你必须手动编写完整的链接并维护每个参数。

答案 2 :(得分:0)

您可以创建一个迭代$_GET数组并创建查询字符串的函数。然后,您所要做的就是更改$_GET数组并生成此查询字符串。

Pseudocode(斜线我真的不知道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);

答案 3 :(得分:-1)

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

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

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