php - 按用户 ID 和 photo_id 列出的下一张/上一张图像

标签 php mysql arrays image image-gallery

我创建了下一个和上一个图像链接,效果很好。但我希望当用户点击给定相册中最后上传的图像时,它们都循环回到开头或结尾。

因此,我点击了我创建的相册,该相册的相册 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/

相关文章:

mysql - 如何将重复数据值分组到我的脚本中

MySQL DISTINCT 没有过滤掉

java - 使用数组列表将标记添加到 Google map 。安卓

php - 设置文本区域中的最大字符数

php - 如何更好地将包裹(重量)分装到不同的卡车上以实现最佳效率

PHPMailer,SMTP 错误无法连接到 smtp 主机

PHP 更新 MySQL 列为空

php - 如何将每个文件名的一部分添加到 glob 生成的数组中?

c - 分析C程序的内存使用情况

javascript - AngularJS 1.2.0 $http 不保留数组元素