好的我有一个大型数据库我查询喜欢
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
我做错了什么
答案 0 :(得分:1)
$_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);
不要忘记考虑协议。您的网站将来可能会使用HTTPS。此外,他们直接在查询中插入变量意味着您可能对SQL注入攻击持开放态度。始终使用准备/参数化查询来避免此问题。
答案 1 :(得分:0)
您正在使用'REQUEST_URI'
,它自然会包含您所在页面的地址,因此,如果您在浏览器中访问http://example.com/somescript.php?foo=bar
,REQUEST_URI
将会是/somescript.php?foo=bar
。
由于您将其吐出到html的href
参数中,然后点击更多参数,您自然会开始构建更长更长的网址:
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