使用URL的PHP分页

使用URL的PHP分页,php,mysql,Php,Mysql,好的,我有一个大数据库,我可以这样查询 SELECT * FROM PricePaid WHERE PostCode LIKE '$loc%' ORDER BY Price DESC LIMIT $start,$perPage 我知道如何通过分页链接计算出找到的总记录,并对它们进行分页。我在下一个链接中使用以下代码: <a href='http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."&s

好的,我有一个大数据库,我可以这样查询

SELECT * FROM PricePaid WHERE PostCode LIKE '$loc%'
         ORDER BY Price DESC
     LIMIT $start,$perPage 
我知道如何通过分页链接计算出找到的总记录,并对它们进行分页。我在下一个链接中使用以下代码:

<a href='http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."&start=$next'>NEXT</a>
然后,当我第一次单击我的下一页链接时,我的url传递了start变量,查询显示第二页

 mysite/uk-property-prices.php?loc=l24&start=1  
但当我再次单击“下一步”时,我得到了这个消息

mysite/uk-property-prices.php?loc=l24&start=1&start=2
现在我知道这是可行的,但过了一段时间,我的URL变得如此之长

mysite/uk-property-prices.php?loc=l24&start=1&start=2&start=3&start=4

我做错了什么

$\u服务器['REQUEST\u URI']
也包含查询字符串。您所做的就是每次附加越来越多的变量

您需要解析查询字符串,替换要替换的值,然后重新构建URL。PHP已经在
$\u GET
中为您解析了它(假设您不需要重复的值)。未经测试,但请尝试以下方法:

$newQueryParts = $_GET;
$newQueryParts['loc'] = 3;
$urlParts = parse_url($_SERVER['REQUEST_URI']);
echo 'http://', $_SERVER['HTTP_HOST'], $urlParts['path'], '?', http_build_query($newQueryParts);

别忘了考虑议定书。您的站点将来可能会使用HTTPS。此外,它们还表明您直接在查询中插入变量的方式意味着您可能会受到SQL注入攻击。始终使用准备好的/参数化的查询来避免此问题。

您使用的是
'REQUEST\u URI'
,它自然会包含您所在页面的地址,因此如果您访问
http://example.com/somescript.php?foo=bar
在浏览器中,
请求URI
将是
/somescript.php?foo=bar

由于您将其吐出到html的
href
参数中,然后添加更多参数,您自然会开始构建越来越长的URL:

1st request    /somescript.php?foo=bar&start=1
               ^^^^^^^^^^^^^^^^^^^^^^^---request uri for #2
2nd request    /somescript.php?foo=bar&start=1&start=2
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---request uri for #2
3rd request    /somescript.php?foo=bar&start=1&start=2&start=3
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^request_uri for #3

我不记得确切的名称,但您可以只获取脚本名称(不带get参数),并使用它来代替'REQUEST_URI'@Lashane,但并不总是这样。如果是重写规则,您需要从
$\u服务器
获取。非常感谢Brad的详细解释。我记得过去做过这件事,不过我会尝试一下你的建议,看看进展如何
1st request    /somescript.php?foo=bar&start=1
               ^^^^^^^^^^^^^^^^^^^^^^^---request uri for #2
2nd request    /somescript.php?foo=bar&start=1&start=2
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---request uri for #2
3rd request    /somescript.php?foo=bar&start=1&start=2&start=3
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^request_uri for #3