PHP 分页与变量丑陋的 URL

标签 php mysql

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

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/

相关文章:

php - 替换 PHP session

mysql - 需要创建一个 View ,在 from 子句中没有子查询的情况下获得相同的结果

php - Laravel Facebook 登录 - 无回调(本地主机)

php - GuzzleHttp 尝试在 php 7 安装中将 JSON 字符串解码为数组时出错

mysql - 如果 IN TableB.Code,则从 TableA.Code 中选择

mysql - session 变量不同于 MariaDB 中的全局变量

mysql - 效率: How many MySQL rows should I pull at a time?

php - 复杂的 MySQL 数据库查询

php - 为什么我使用 .htaccess 文件时会收到 500 错误

php - 如何使用 nginx 和 php 进行没有 .php 扩展名的路由