分页和搜索表单问题

时间:2012-01-27 13:53:36

标签: php html

我有非常基本的分页脚本和搜索表单,有~4个字段,action="get"现在我的问题是,当我提交表单时,我得到这样的网址:

user/people/1/?search=true&country=uk&age=20&online=true ... and so on

所以在我提交表单后,一切都很好,但是当我转到页面2时,我的网址变为:

 user/people/2 

所以我的搜索参数消失了,这就是我渲染链接的方式

 href="user/people/<?=$next?>"

所以我的问题是保持参数的最佳方法是什么,因为现在我只能想到for循环并通过合并所有$_GET值来构建我的链接,我应该这样做?

2 个答案:

答案 0 :(得分:1)

只需附加$_SERVER[ 'QUERY_STRING' ](请务必先htmlspecialchars())。

href="user/people/<?php echo htmlspecialchars( "{$next}?{$_SERVER[ 'QUERY_STRING' ]}" ); ?>"

顺便说一句,PHP短标记<?= ?>不可移植,因此您应该考虑不使用它们,而是使用<?php echo ?>代替。

更新

@Wrikken在答案中提出了几个好点:

1)将ENT_QUOTES作为第二个参数传递给htmlspecialchars() ,如果单引用属性值(或覆盖它被改为单引号)将非常重要在将来)。无论如何,这很容易忘记,因为我几乎总是双引用属性值。不幸的是,它进一步膨胀了一个已经因长函数名称而膨胀的调用。

2)如果您只是按原样传递查询字符串,那么我当然更喜欢使用$_SERVER[ 'QUERY_STRING' ]而不是http_build_query( $_GET )。但是,如果您需要更改某些查询参数,http_build_query()将成为故障单。您可以在我的PHP faceted browser中找到相关示例。

答案 1 :(得分:1)

或者:

...ople/?<?php echo htmlspecialchars($_SERVER['QUERY_STRING'], ENT_QUOTES);?>"

或者:

...ople/?<?php echo htmlspecialchars(http_build_query($_GET), ENT_QUOTES);?>"

或者:

...ople/?<?php echo htmlspecialchars(http_build_query($some_custom_array), ENT_QUOTES);?>"