我是否可以传递GET变量,同时仍然保留PHP中的旧GET变量

时间:2012-06-07 20:24:33

标签: php sorting get

我使用GET进行分页,?page = 1是第1页,依此类推。

问题是,我想对数据进行排序,使用GET是更好的方法,因为:

?page=1&sort=date

如果我尝试并单击第2页,它将转到?page = 2并且松散排序。

我也尝试了$_SERVER['QUERY_STRING'],但是当我从一个页面到另一个页面时,我最终会在地址栏中累积?page=#

以下是我的分页链接的生成方式:

<a href='{$_SERVER['PHP_SELF']}?page=$nextpage'>Next</a>

我将如何做到这一点?

13 个答案:

答案 0 :(得分:8)

您可以采取以下措施:

// Check if there are any GET parameters
if (!empty($_GET)) {
    $link = "?page=2";

    // Loop through the parameters
    foreach ($_GET as $parameter => $value) {
      // Append the parameter and its value to the new path
      $link .= "&" . $parameter . "=" . urlencode($value);
    }
}

答案 1 :(得分:3)

您可能想要查看此主题: How can I add GET variables to the end of the current page url using a form with php?

基本上使用$_SERVER['REQUEST_URI']获取当前网址和变量,并在链接中附加获取变量。

答案 2 :(得分:2)

$_GET是一个数组,因此您可以遍历其中的元素以重新创建新URL。 PHP's page on $_GET上有很多示例,包括one,它们展示了如何遍历数组以从网址中删除GET参数。

答案 3 :(得分:2)

如果你想在你的网址上添加sort参数,你可以这样做:

$qs_sort = isset($_GET['sort']) ? '&sort=' . urlencode($_GET['sort']) : '';

然后更改您正在回复的<a>,将$qs_sort追加到网址的末尾:

<a href='{$_SERVER['PHP_SELF']}?page=$nextpage$qs_sort'>Next</a>

答案 4 :(得分:1)

您需要决定每页显示的项目数。如果已知,您可以轻松使用页面GET变量来确定要从数据库查询的项目子集,例如,如果每个页面显示10个项目,则第一个页面是项目0到9,页面2是10到19,等等。当然,这要求您的数据库支持某种方式来选择数据子集。

当然,如果您使用数据库中的一致查询,它将始终以相同的方式排序。

答案 5 :(得分:1)

有几种选择:

  • 将sort参数添加到每个分页链接
  • 将最新的排序列存储在用户的会话中(请注意,当用户打开多个标签时,这样做的缺点是效果不佳)。
  • 如果您使用ajax进行分页,请在页码上添加事件处理程序,并让javascript存储当前的排序字段并将其发送到GET请求中。

答案 6 :(得分:1)

你可以在这里做几件事......

  1. 添加/更改GET参数时,请务必另外更改指向其他页面的所有链接。如果您有<a href="?page=1">请确保在选择排序功能时附加&sort=date

  2. 点击链接时可以使用jQuery追加sort参数 -

  3. var _currentSortMethod = 'date';
    $("a.someOtherLink").on('click',function(e){
      window.locaton.href = $(this).attr('href') + '&sort=' + _currentSortMethod;
      e.preventDefault();
    });
    

答案 7 :(得分:1)

在您的代码中,如果您正在控制URL链接,那么您只需要将该排序变量再次传递到您的URL链接,如下所示:

<?php     $sorting = $_REQUEST['sort'];
          $page = $_REQUEST['page'];
          $page = $page + 1;
          echo '<a href="datapage.php?page=' . $page . '&sort=' . $sorting. '>Next Page</a>';
?>

答案 8 :(得分:1)

只需将其添加回网址即可。

<?php $sort = (isset($_GET['sort'])) ? "&sort=".$_GET['sort'] : ""; ?>

<a href="link.php?page=2<?php echo $sort; ?>">link</a>

答案 9 :(得分:1)

在绘制用于排序的链接时,检测当前页面并记下包含该页面的链接。此外,在绘制分页器链接时,请将其与检测到的排序一起记下来。

假设您在第2页,按标题降序排序列表,您的链接应如下所示:

  • 按标题排序
<a href="?page=2&amp;sort=title+desc>Title</a>
  • 按订单排序
<a href="?page=2&amp;sort=order+desc>Order</a>
  • 分页第1页
<a href="?page=1&amp;sort=title+desc>1</a>
  • 分页第3页
<a href="?page=3&amp;sort=title+desc>3</a>

依旧......

答案 10 :(得分:1)

你可以试试这个:

$query = new HttpQueryString();
$query->set("page", $nextPage);
echo "http://www.example.com/?" . $query->toString();

以下是有关HttpQueryString类的一些其他文档:http://www.php.net/manual/en/class.httpquerystring.php

希望有所帮助!

答案 11 :(得分:0)

大规模分页通常通过数据库API完成。可以使用$ _SESSION变量通过PHP sessions进行小规模分页。

答案 12 :(得分:-1)

对于任何想要保留当前参数的解决方案的人,如果给出新值的更新,并附加新参数,这就完成了工作:

代码

$domainurl='https://' . $_SERVER['SERVER_NAME'];
$currenturl=$domainurl . $_SERVER['PHP_SELF'];

function urlVars($new=array()) {
    $url=$GLOBALS['currenturl'];
    $vars=array_merge($_GET, $new);
    foreach ($vars as $key => $var) {
        $params[$x]='&' . $key . '=' . $var;
        $x++;
    } $str='?' . trim(implode($params), '&');
    return $url .= $str;
}

用法示例:

 <a href="' . urlVars(array('page'=>'2', 'view'=>'30', etc.)) . '">Go To Page 2 & Show 30 Results</a>

使用仅返回当前页面的域和路径的$currenturl变量而不是返回查询字符串的$ _SERVER ['REQUEST_URI'],以解决重复查询问题,并允许更改以前设置的参数

这是因为array_merge()会将两个或多个数组放在一起,如果有多个同名的键,则声明的最后一个键占用蛋糕,而其他所有键都被否定。由于$_GET数组中填充了旧参数,因此必须位于$new数组之前。例如:

$_GET['page']='1';
if ($new['page']='1') {array_merge($_GET, $new);} // 'page'=>'1'
elseif ($new['page']='4') {array_merge($_GET, $new);} // 'page'=>'4'

$_GET['page']='4';
if ($new['page']='2') {array_merge($_GET, $new);} // 'page'=>'2'

注意

这个功能的一个简洁的功能以及我用它工作几个小时直到它完美的整个原因是你不必每次有新的链接/表格或有一些数组时指定相同的参数在另一个包含可能的param键的脚本中。你放入$new数组的所有内容都是新的(显然)或被更改的参数。这是普遍的!