分页 - 检查是否存在下一个/上一个记录


Pagination - checking for existence of next/previous record

我必须做一个照片分页。

<<上一页 [照片] 下一>>

支持实际页面是这样的:www.myWebSite.com/photo.php?id=12

如果我按 Next ,那么我将重定向到 www.myWebsite.com/photo.php?id=13 ,但如果id=13的照片从数据库中删除,我该怎么办?

例如:

<?php
require_once '../classes/dataBaseManager/ImageDataBaseManagr.php';
if ( isset ( $_GET ['id'] ) ) {
  $id = $_GET ['id'];
  /**
  * Initialize my data base class.
  */
  try {
    $dataBase = ImageDataBaseManager::connect();
    $select = $dataBase->select( array ( 'id' => $id );
    $previous = (int)($select ['id'] - 1);
    $next = (int)($select ['id'] + 1);
    $photo = $select ['path'];
    echo '<a href="http://www.myWebSite.com/photo.php?id='.$previous.'">Previous</a>';
    echo '<img src="'.$path.'" />';
    echo '<a href="http://www.myWebSite.com/photo.php?id='.$next.'">Previous</a>';
  }
  catch ( PDOException $e ) {
    error_log( $e->getMessage );
    return;
  } 
}
?>

谢谢:)

在我看来,这是实现的缺陷。我将建议以下查询字符串(用于下一个)

 photo.php?currentid=1&action=next 

这样,您选择的呼叫将变成脚轮提到的内容

您需要获取数据库中的最大照片数量,如果达到最大值,请不要显示next链接。此外,您不应该使用照片的 ID 进行分页。检查 MySQL 的LIMIT选项。

您有当前页面 ID,并且想要获取下一个现有 ID。因此,构造如下查询:

SELECT id FROM `table` WHERE `id` > '"$current_id'" ORDER BY `id` ASC LIMIT 1

这应该可以解决您的问题。

搜索上一张照片时,请使用以下查询:

SELECT id FROM `table` WHERE `id` < '"$current_id'" ORDER BY `id` DESC LIMIT 1

您还需要检查mysql_num_rows()是否大于 0。如果是,则您有下一条记录。如果没有,您到达了最后一个。

这取决于您的网站的工作方式。您想让人们知道图像已被删除吗?还是默默跳过它?如果要跳过它,只需修改查询即可获取请求的 ID 或下一个最高 ID。事实上,如果你把方向也作为变量传递,你可以保留这个查询:

假设您请求了?ID=13&next,使其成为我们的查询:

SELECT foo, bar FROM images WHERE id >= 13 ORDER BY id ASC LIMIT 1

<的方向将由 URL 中是否存在&next&back来确定:

$direction = isset( $_GET['back'] ) ? '<' : '>' ;

我们正在定义一个默认的搜索方向,即前进到我们的方向变量。如果 URL 中存在&back,那么我们将尊重这一点并在查询中反转方向。否则,我们将始终期待等于或大于请求的 ID 的图像。

与往常一样,检查 mysql_num_rows() 的返回值,以确定结果中是否存在数据。如果您的查询正在查找下一个图像,但未找到任何内容,则需要通知用户他们位于库的末尾/开头。