我创建了下一个和上一个图像链接,效果很好。但我希望当用户点击给定相册中最后上传的图像时,它们都循环回到开头或结尾。
因此,我点击了我创建的相册,该相册的相册 ID 为“22”,一旦我点击 image243,我就上传了我上传的图像 - image101、图像 202 和 image243。我希望它返回到相册第一张图片 image101。
我想与之前做同样的事情,当我点击 Image101 时,我希望链接返回到 image243。 (不言自明)。
每个用户都有自己的相册,他们使用上传的图像创建相册,其中包含各种 photo_id,具体取决于给定用户上传的图像数量。所以它不是按1、2、3、4的顺序排列的。 如果我刚刚将新图像上传到网站,它将创建一个 photo_id 244,因为这是下一个可用的 photo_id,如果另一个帐户中的另一个用户在我的帐户下直接上传图像,他们的照片将有一个 photo_id共 245 个。 下面的代码是我到目前为止所拥有的,下一个和上一个跳转到下一个用户上传的图像,错过了其他用户帐户上传的任何图像。我只需要下一张和上一张,以免在最后一张图像之后出现空白页。
我希望我已经清楚地解释了这一点,没有让任何人头疼。如果我能得到一些帮助/建议或指导,我很乐意回答任何问题。
谢谢
用于在用户设置的相册中选择下一张/上一张用户图像的代码
<?php if(isset($_GET['pid'])){ ?>
<?php
//Now we'll get the list of the specified users photos
$sql = "SELECT * FROM userphotos WHERE photo_id=".$_GET['pid'];
$query = mysql_query($sql)or die(mysql_error());
while($photo = mysql_fetch_array($query)){
$user=rawfeeds_user_core::getuser($photo['photo_ownerid']);
?>
<p class="frontpage_description"><a href="profile.php?username=<?php echo $user['username']; ?>">
<?php
$id=$_SESSION['id'];
if($id==$_SESSION['id']){
echo "<img border=\"0\" src=\"imgs/cropped".$id.".jpg\" onerror='this.src=\"img/no_profile_img.jpeg\"' width=\"40\" >";
}
?>
<?php echo $user['fullusersname'];?></a></p>
<?php
//Now we'll get the list of the specified users photos
$sql = "SELECT id FROM albums WHERE user_id=".$user['id']." ORDER BY name ASC LIMIT 1 ";
$query = mysql_query($sql)or die(mysql_error());
while($album = mysql_fetch_array($query)){ ?>
<?
$photo_sql = "SELECT photo_id FROM userphotos WHERE photo_ownerid = ".$user['id']." AND album_id=".$album['id']." ORDER BY photo_id ASC";
$photo_result = mysql_query($photo_sql) or die(mysql_error());
while($row=mysql_fetch_array($photo_result)) {
$photos[]=$row[0];
}
$total = mysql_num_rows($photo_result);
print_r($photos);
// Testing example:
// $photos = array(200, 202, 206, 211);
// $total = count($photos);
$current = $_GET['pid']; // whatever your position is in the photo array
if($current > ($total-1) || $current < 0) {
echo "Error: nonexistent photo ID.";
exit;
}
echo "<div class='photo_captionholder'><b>Name</b> : ".$photo['photo_name']." | <b>Caption</b> : ".$photo['photo_caption']."</div>";
echo "<img class='viewer_image' alt='".$photo['photo_name']."' width='60%' src='";
echo "include/media.userimage.php?pid=".$photos[$current];
echo "'\">"; // display current photo
$next = ($current+1) % $total; // modulo
$prev = (($current-1) < 0) ? $total-1 : $current -1;
echo "<a href='photo.php?pid=".$next."'>Next</a>";
echo " | <a href='photo.php?pid=".$prev."'>Prev</a>";
?>
<?php
}}}
?>
最佳答案
说明:
您的“下一个”查询将获取当前图像之后的记录。 (即记录3将得到4,5,6)
您的代码从该结果中获取第一条记录。 (即4)
向 PREVIOUS 记录添加 UNION 查询会将该记录放在查询结果的末尾。 (即 4,5,6, 1,2)注意:暂时忽略 LIMIT
如果第一个 SELECT 没有返回任何记录,那么第一条记录实际上将位于结果的顶部(即,对于记录 6,下一条记录为空,后跟 1,2,因此下一条记录为 1)
下一步
$photo_sql = "(SELECT photo_id FROM userphotos WHERE photo_id > ".$_GET['pid']." AND photo_ownerid = ".$user['id']." AND album_id=".$album['id']." ORDER BY photo_id ASC LIMIT 1)";
$photo_sql.= " UNION (SELECT photo_id FROM userphotos WHERE photo_id < ".$_GET['pid']." AND photo_ownerid = ".$user['id']." AND album_id=".$album['id']." ORDER BY photo_id ASC LIMIT 1)";
上一个
$photo_sql = "(SELECT photo_id FROM userphotos WHERE photo_id < ".$_GET['pid']." AND photo_ownerid = ".$user['id']." AND album_id=".$album['id']." ORDER BY photo_id DESC LIMIT 1)";
$photo_sql.= " UNION (SELECT photo_id FROM userphotos WHERE photo_id > ".$_GET['pid']." AND photo_ownerid = ".$user['id']." AND album_id=".$album['id']." ORDER BY photo_id DESC LIMIT 1)";
我已将第二个查询添加到第一个 .= 并反转 photo_id 检查 > 变为 <
关于php - 按用户 ID 和 photo_id 列出的下一张/上一张图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11467204/