2012-07-12 172 views
0

我已经创建了一个很好的下一个和prev图像链接。但我希望他们都回到开始或结束。所以说,我有image101,图像202和image243,一旦我点击image243它会回到image101。PHP下一张/上一张图片Loop

我想同以前的,当我打Image101我想链接回去image243。 (自我解释)。

我怎么会去这样做呢?

<?php $sql = "SELECT id FROM albums WHERE user_id=".$user['id']." ORDER BY id ASC LIMIT 1"; $query = mysql_query($sql)or die(mysql_error());  

while($album = mysql_fetch_array($query)){ ?> 


        <?php 
       $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_query = mysql_query($photo_sql)or die(mysql_error()); 
       $photo_next=mysql_fetch_array($photo_query); 



echo "<a href='photo.php?pid=".$photo_next['photo_id']."'>Next</a>"; 



       $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_query = mysql_query($photo_sql)or die(mysql_error()); 
       $photo_prev=mysql_fetch_array($photo_query); 

        echo " | <a href='photo.php?pid=".$photo_prev['photo_id']."'>Prev</a>"; 

} 


?> 
+0

if(mysql_num_rows($ photo_query)== 0){... ORDER BY photo_id LIMIT 1 ...} ... ORDER BY photo_id DESC LIMIT 1 – Waygood 2012-07-12 11:28:33

+0

忘记添加最重要的部分和album_id =“。 $专辑[ '身份证']“。 这可能会或可能不会改变一点点.. – dave 2012-07-12 11:53:28

回答

1

为什么不这样做,从PHP?而不是所有这些多余的MySQL查询,你可以得到照片的ID,并使用PHP:

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

$current = 2; // whatever your position is in the photo array 

echo '<img src="'.$photos[$current].'" alt="my image!" />'; // display current photo 

$next = ($current+1) % $total; // modulo 
$prev = (($current-1) < 0) ? $total : $current -1; 

echo "<a href='photo.php?pid=".$next."'>Next</a>"; 
echo " | <a href='photo.php?pid=".$prev."'>Prev</a>"; 

只是为了说明,我们用一个modulo以获得正确的下一个页面。获取前一个页面本身就说明了一点:如果我们的数字低于零,请使用$总数的照片。

使用它,这种方式更有效,数据库明智的,比所有这些大于-使用小于查询。

+0

但用户图像没有按照编号顺序上传..他们的编号为1,2,3,4。它就像通过用户上传下一个..这就是photo_id。 因此,它更像我的用户1具有图像1,3,6和9 和我的朋友有图片2,4,5,7和8 – dave 2012-07-12 15:27:18

+0

这就是为什么它说:“位置的照片阵列”,而不是“有照片的证件”。尽管如此,因为你维持秩序并知道照片的总数。我添加了一行代码来向您展示如何跟踪所有内容。基本上,你不再直接使用“pid”,而是使用阵列位置。如果你拼命想使用pid,你可以使用一个临时变量,比如每行一个@position:= @ position + 1,用它来计数,但是无论如何显示pid。 – Doa 2012-07-12 16:59:17

+0

你能解释一下这个变量的作用吗? $ current = 2; 我试过你的代码,它从零开始。我不知道我是否做错了什么。或者我没有正确地提出我的问题。 我已经创建了一个张专辑的专辑22内至今有照片的证件200,201和204,我的朋友有203在自己的19张专辑图片。我有,我点击旁边photo_id 204的部分从201对我的朋友形象203 ..只是我没有得到循环部分。 我已经尝试了你的建议,并给我的下一个ID为1,当我悬停一次点击,我将鼠标悬停在上一页,它表示0. – dave 2012-07-12 22:23:50

0

您可以添加一个链接,这样第一个图像:

$photo_sql = "SELECT MIN(photo_id) FROM userphotos WHERE photo_ownerid = ".$user['id'] 
$photo_query = mysql_query($photo_sql)or die(mysql_error()); 
$photo_first =mysql_fetch_array($photo_query); 
echo "<a href='photo.php?pid=".$photo_first['photo_id']."'>First</a>"; 

当然,你可以使用MAX来获得最后一张照片。

0

这会给你下一个项目,也是第一个条目,这意味着如果没有下一个将会给第一。

$photo_sql = "SELECT photo_id FROM userphotos WHERE photo_id > ".$_GET['pid']." AND photo_ownerid = ".$user['id']." ORDER BY photo_id ASC LIMIT 1 "; 
$photo_sql. = "UNION SELECT photo_id FROM userphotos WHERE photo_ownerid = ".$user['id']." ORDER BY photo_id ASC LIMIT 1 "; 

然后在前面做一个联盟与ORDER BY photo_id DESC

+0

你在第二行有一个错误..并且它不工作。 $ photo_sql = “选择photo_id FROM userphotos WHERE photo_id>”。$ _ GET [ 'PID']。 “AND photo_ownerid =”。$用户[ 'ID']。 “AND album_id =”。$相册[ 'ID'] 。“ORDER BY photo_id ASC LIMIT 1”; $ photo_sql。 “UNION SELECT photo_id FROM userphotos WHERE photo_ownerid =”。$ user ['id']。“AND album_id =”。$ album ['id']。“ORDER BY photo_id ASC LIMIT 1”; – dave 2012-07-12 11:50:23

相关问题