您好我有一个基于PHP的分页和排序方法,它可以正常工作。
我能够根据任何类别进行排序和分页,但在每页行数时遇到问题。
我使用GET方法获取分页和排序信息
if (isset($_GET['rpp'])&& is_numeric($_GET['rpp'])) {
$rowsperpage = mysql_real_escape_string($_GET['rpp']);
}else{
$rowsperpage='5';
}
if (isset($_GET['page']) && is_numeric($_GET['page'])) {
$currentpage = (int) mysql_real_escape_string($_GET['page']);
} else {
$currentpage = 1;
}
if (isset($_GET['order']) && in_array($_GET['order'], $order)) {
$orderby = mysql_real_escape_string($_GET['order']);
}else{
$orderby='id';
}
$sortby = '';
if (isset($_GET['sort'])) {
$sortby = mysql_real_escape_string($_GET['sort']);
}else{
$sortby='desc';
}
分页我使用了以下类型的网址字符串
echo " <li><a href='$pagename?order=$orderby&sort=$sortby&rpp=$rowsperpage&page=$nextpage'>Next»»</a>
我的mysql查询是
$sql2 = "SELECT * FROM internet_security ORDER BY $orderby $sortby LIMIT $rowsperpage OFFSET $offset";
在html中我使用链接来排序类别
<a href="?order=id&sort=desc">id-desc:</a>
<a href="?order=id&sort=asc">id-asc:</a>
<a href="?order=title&sort=desc">title-desc:</a>
<a href="?order=title&sort=asc">title-asc:</a>
**limit rows by**
<a href="?&rpp=5">5</a>
<a href="?&rpp=10">10</a>
<a href="?&rpp=20">20</a>
我的问题是 每件事情都很好,除非我限制每行限制行数 - 行限制为限制(5,10,20)选择但是如果我点击分页每个东西都会转到默认设置值,即按ID和DESC顺序,LIMIT为5。
如果我这样做
<a href="?order=id&sort=desc&rpp=5">id-desc:</a>
<a href="?order=id&sort=desc&rpp=10">id-desc:</a>
<a href="?order=id&sort=desc&rpp=20">id-desc:</a>
然后它可以工作,但是我必须至少有12个完整功能的链接。这不是标准的方法。
我想要的是一旦默认设置限制或通过排序选项设置限制,我将能够按ID标题等排序..并且paginatin应该与它一起工作。
我希望我说清楚。 请看看我做错了什么,并为我的方法提出任何可能的解决方案。
答案 0 :(得分:1)
(升级到答案)
将$rpp
存储在$_SESSION
变量中,仅在$_GET
中存在时更新:
if ( isset($_GET[ 'rpp'])) $_SESSION['rpp'] = intval($_GET['rpp']);
elseif (!isset($_SESSION['rpp'])) $_SESSION['rpp'] = 5;
然后在您的查询中使用$_SESSION['rpp']
:
$sql2 = "
SELECT *
FROM internet_security
ORDER BY $orderby $sortby
LIMIT $_SESSION[rpp] OFFSET $offset
";