我必须做一张照片分页。
<<上一页[照片]下一页>>
假设实际页面是这样的: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;
}
}
?>
谢谢:)
答案 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()
的返回值是否存在结果中的数据。如果您的查询正在查找下一张图片,但什么都没找到,那么您可能希望通知用户他们位于图库的结尾/开头。