【问题标题】:PHP & MySQL - Displaying data correctly [duplicate]PHP和MySQL - 正确显示数据[重复]
【发布时间】: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 应该很明显)

标签: php mysql get isset


【解决方案1】:

获取行数

SELECT COUNT(*) FROM menuitem

只有在应该显示的时候才显示链接

$prev = $start - 4;
if ($prev >= 0) {
    echo '<td><a href="?start=' . $prev . '">Previous Items</a></td>';
}

$next = $start + 4;
if ($next < $count) {
    echo '<td><a href="?start=' . $next . '">Next Items</a></td>';
}

【讨论】:

  • 这有效,除了 if ($next
  • @PixelCheese 您是否在menuitem 变量下获取menuitem 中的行数?
  • 嘿@adam187 - 我做到了.. $count = mysqli_query($con, "SELECT COUNT(*) FROM menuitem"); if (!$result) { printf("错误: %s\n", mysqli_error($con));出口();错误是说mysqli_result类的对象无法转换为int。
  • @PixelCheese mysqli_query 返回对象而不是数据。尝试$count = mysqli_query($con, "SELECT COUNT(*) FROM menuitem")-&gt;fetch_row()[0]; fetch_row() 方法应该得到你的数据数组,然后你得到第一列 [0]
  • 你就是那个男人!非常感谢。
【解决方案2】:

您可以在第一次没有限制的情况下运行查询,将 SELECT * 替换为 SELECT COUNT() 并获取条目数。然后在运行查询时,如果 $start + 4 > count,则不显示 Next 按钮,如果 $start

【讨论】:

    猜你喜欢
    • 2012-05-13
    • 2014-09-08
    • 2014-08-03
    • 1970-01-01
    • 2011-10-16
    • 2023-03-14
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多