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

时间:2012-04-25 13:58:59

标签: php mysql image pagination pdo

我必须做一张照片分页。

  

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

假设实际页面是这样的: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;
  } 
}
?>

谢谢:)

4 个答案:

答案 0 :(得分:1)

在我看来,这是实施的缺陷。 我将推荐以下查询字符串(下一个)

 photo.php?currentid=1&action=next 

这样你的选择调用就会变成像castor

提到的那样

答案 1 :(得分:0)

您拥有当前页面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.如果是,则您有下一条记录。如果不是,你就到了最后一个。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

假设您已请求?ID=13&next,请将此作为我们的查询:

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

<的方向取决于网址中&next&back的存在:

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

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

与往常一样,检查mysql_num_rows()的返回值是否存在结果中的数据。如果您的查询正在查找下一张图片,但什么都没找到,那么您可能希望通知用户他们位于图库的结尾/开头。