【问题标题】:How to work with $_SERVER['QUERY_STRING']如何使用 $_SERVER['QUERY_STRING']
【发布时间】:2011-01-31 21:43:55
【问题描述】:

如何使用 $_SERVER['QUERY_STRING'] 和分页?

当我的表格按此链接排序时:

<a href="'.$_SERVER['PHP_SELF'].'?sort_name=name&sort=asc" title="'.$lang['sorteer_asc'].'"></a>

我的网址变成:relation.php?sort_name=adres&sort=asc

我使用分页链接:

echo '<a href="'.$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&page='.$i.'">'.$i.'</a> '; 

而url变成:relation.php?sort_name=adres&sort=asc&page=2

到目前为止还不错,但是当浏览到其他页面时,它可能只要: 关系.php?sort_name=adres&sort=asc&page=2&page=3&page=14&page=23&page=27

由于 $_SERVER['QUERY_STRING'],年龄不断出现,我怎样才能清理我的 url,只保留最后一页和 ?sort_name=adres&sort=asc。

或者您是否建议其他排序和分页解决方案?

【问题讨论】:

标签: php


【解决方案1】:

您应该使用http_build_query() 重新组装它,而不是重复使用QUERY_STRING

// Merge $_GET with new parameter
$QS = http_build_query(array_merge($_GET, array("page"=>2)));

// You should apply htmlspecialchars() on the path prior outputting:
echo "<a href='" . htmlspecialchars("$_SERVER[PHP_SELF]?$QS") . "'> $i </a>";

因此,您包含了所有当前的$_GET 参数,但可以添加或替换条目为新值。并且确保每个只出现一次。

【讨论】:

  • 感谢您的链接。看起来很方便。
  • 通过这个解决方案,我得到了 url 中的当前页面和最后一页 ?page=2&page=9
  • @Muiter:那么数组+是不够的。请改用http_build_query(array_merge($_GET, array("page"=&gt;$i)));。使用 array_merge 可以可靠地替换重复条目。 - 哦,不要像您的示例中那样自己附加."&amp;page=9"$QS 已经包含了 page 参数。你当然只能使用内部的array("page"=&gt;$i)
  • @mario 这也删除了 url '?sort_name=adres&sort=asc' 的一部分
  • @mario: 我已经上传了我的分页文件:www.pws.nl/pagination.rar
【解决方案2】:

创建一个链接构建器(简单的 php whitch make array( "a" => "b", "c" => "d" )到 ?a=b&c=d 并每次都重建它(例如,放在那里 "sort_name" => ... , "sort" => ..., "page" => ... )

如果您仍想使用 QUERY_STRING - 检查它是否包含 &page=... 并替换它(均由 regexp 生成)

【讨论】:

    【解决方案3】:

    不要使用 QueryString,只需在脚本开头创建一个变量:

    $pagerUrl = $_SERVER['PHP_SELF'].'?sort_name='.$_GET['sort_name']&sort=$_GET['sort'];
    

    并在您的链接中使用它:

    echo '<a href="'.$pagerUrl.'&page='.$i.'">'.$i.'</a> ';
    

    【讨论】:

    • PHP_SELF 总是会将先前的查询变量附加到末尾,这是 OP 问题的根源。
    • 不,这不是真的,查询变量只包含在$_SERVER['QUERY_STRING']中,不在$_SERVER['PHP_SELF']中,所以问题是QUERY_STRING
    • 哇,你知道我刚刚在我的本地服务器上转储了一个 phpinfo() 并且不知何故将 REQUEST_URI 与 PHP_SELF 混淆了。 Touché,我的立场是正确的——我很抱歉。
    • 此代码易受 XSS 攻击。永远不要在没有过滤的情况下直接回显 $_GET。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-03
    • 1970-01-01
    相关资源
    最近更新 更多