【发布时间】:2013-12-04 19:16:44
【问题描述】:
我拉入数据的PHP代码如下:
$start = (isset($_GET['start']) ? (int)$_GET['start'] : 0);
$result = mysqli_query($con,"SELECT * FROM menuitem LIMIT $start, 4");
if (!$result) {
printf("Error: %s\n", mysqli_error($con));
exit();
}
我的数据以每页 4 条的限制显示。 我创建了一个“下一个”和“上一个”链接,用于显示下一个或前四个项目。
echo "<table width=\"1024\" align=\"center\" >";
echo "<tr height=\"50\"></tr>";
$prev = $start - 4;
echo '<td><a href="?start=' . $prev . '">Previous Items</a></td>';
$next = $start + 4;
echo '<td><a href="?start=' . $next . '">Next Items</a></td>';
echo "</table>";
我面临的问题是“下一个项目”按钮不断超过我数据库中的项目数。我需要限制这个和“以前的项目”,所以“下一个项目”链接不会超出我的数据库的范围,并且“以前的项目”不会变成负数。我不确定该怎么做。有什么想法吗?
【问题讨论】:
-
你有什么办法解决这个问题?
-
从根本上说,在处理页面时有一个与常规“选择窗口”查询相匹配的“选择计数”查询是个好主意...没有计数,你怎么知道?
-
我昨天回答了你的一个非常相似的问题 - stackoverflow.com/questions/20364349/…,我认为它对分页给出了很好的指导。在这里,您似乎甚至没有尝试确定表中的记录数。没有它,您将无法可靠地创建下一个/上一个链接。你也没有像我展示的那样过滤你的输入,所以你有 SQL 注入漏洞。在提出其他问题之前,您确实应该重新审视该示例并确保您理解它。
-
PS - 如果您只想要简单的下一个/上一个(没有更智能的链接)并且您不想要额外的查询。如果您在边界处,结果将返回少于预期的行数或 0 行。你甚至可以检索例如您实际使用的行的两倍,以查看下一页是否存在。 (避免 0 应该很明显)