2012-07-12 149 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