好的,我有一个很大的数据库,我可以像这样查询
SELECT * FROM PricePaid WHERE PostCode LIKE '$loc%'
ORDER BY Price DESC
LIMIT $start,$perPage
我知道如何使用分页链接来计算找到的总记录并对其进行分页。我在 NEXT 链接上使用以下代码:
<a href='http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."&start=$next'>NEXT</a>
这工作正常,因为它保留了我的 ?loc 变量,但启动变量重复。
这是我的网址在首页上的样子
mysite/uk-property-prices.php?loc=l24
然后,当我第一次单击下一页链接时,我的网址传递开始变量并且查询显示第二页
mysite/uk-property-prices.php?loc=l24&start=1
但是当我再次单击“下一步”时,我得到了这个
mysite/uk-property-prices.php?loc=l24&start=1&start=2
现在我知道这可行,但过了一段时间我的网址就变得愚蠢地长,就像这样
mysite/uk-property-prices.php?loc=l24&start=1&start=2&start=3&start=4
我做错了什么
最佳答案
$_SERVER['REQUEST_URI']
也包含查询字符串。您所做的只是每次添加越来越多的变量。
您需要解析查询字符串,替换要替换的值,然后重新构建 URL。 PHP 已经在 $_GET
中为您解析了它(假设您不需要重复的值)。未经测试,但试试这个:
$newQueryParts = $_GET;
$newQueryParts['loc'] = 3;
$urlParts = parse_url($_SERVER['REQUEST_URI']);
echo 'http://', $_SERVER['HTTP_HOST'], $urlParts['path'], '?', http_build_query($newQueryParts);
也不要忘记考虑协议(protocol)。您的网站将来可能会使用 HTTPS。此外,它们直接在查询中插入变量的方式意味着您可能容易受到 SQL 注入(inject)攻击。始终使用准备好的/参数化的查询来避免此问题。
关于PHP 分页与变量丑陋的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24461385/