1

我必须做一个照片分页。

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

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

4 回答 4

1

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

 photo.php?currentid=1&action=next 

这样,您的选择调用将成为 castor 提到的内容

于 2012-04-25T14:06:14.807 回答
0

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

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

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

的方向<将由 URL 的存在&next&back在 URL 中决定:

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

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

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

于 2012-04-25T14:15:50.040 回答
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。如果是,则您有下一条记录。如果没有,你到达了最后一个。

于 2012-04-25T14:02:58.117 回答
0

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

于 2012-04-25T14:03:55.170 回答