用户ID和photo_id的下一个/上一个图像

时间:2012-07-13 08:55:34

标签: php mysql arrays image image-gallery

我创建了一个效果很好的next和prev图像链接。但是我希望他们在用户点击他们给定专辑中的最后一张上传图片时循环回到开头或结尾。

所以我点击了我创建的专辑,其专辑ID为'22',我上传了图片 - image101,图像202和image243,一旦我点击了image243。我希望它能回到相册第一张图片101。

我想和以前一样,当我点击Image101时,我想要链接回到image243。 (自我解释)。

每个用户都有自己的相册,他们使用上传的图片创建自己的相册,各种photo_id取决于给定用户上传的图片数量。所以它不是1,2,3,4顺序。 如果我刚刚将新图片上传到网站,它会创建一个244的photo_id,因为这是下一个可用的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 个答案:

答案 0 :(得分:1)

如果您的情况没有任何改变,建议不要两次提出同样的问题。你已经在这里更好地记录了你的问题,所以这里有一个更清晰的答案,举个例子,并说明你必须如何处理它:

$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);

// 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 '<img src="images/'.$photos[$current].'.png" alt="my image!" />'; // 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>";

答案 1 :(得分:1)

说明:

您的“下一个”查询获取当前图像后的记录。 (即记录3将获得4,5,6)

您的代码从该结果中获取第一条记录。 (即4)

将UNION查询添加到PREVIOUS记录然后将该记录放在查询结果的末尾。 (即4,5,6,1,2)注意:暂时忽略LIMIT

如果从第一个SELECT返回NO记录,则第一个记录实际上将位于结果的顶部(即,对于记录6,下一个为空,然后是1,2,因此下一个记录为1)

NEXT

$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)";

PREVIOUS

$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检查&gt;变成&lt;

答案 2 :(得分:0)

为此我写了一个查询。看看你是否可以根据自己的要求进行更改

select
  users_id as ID,
  (select  users_id from users where users_id > ID limit 1) as NextID,
  (select  users_id from users where users_id < ID ORDER BY users_id DESC limit 1) AS PreviousID
from users
where users_id = 1