簡體   English   中英

Mysql圖像庫的下一個和上一個

[英]Mysql image gallery with next and previous

我正在制作一個圖片庫,您可以在其中查看完整尺寸的圖像,我希望它具有下一個和上一個按鈕以循環顯示完整尺寸的圖像。 到目前為止,我設法使其正常工作,但是刪除並重新上傳圖像時出現問題。

問題是,當我打開刪除並重新上傳圖像的圖庫時,當我單擊圖像以全尺寸查看圖像時,我的下一個按鈕消失了,只有上一個按鈕將您帶到圖像中的最后一個圖像。畫廊,然后出現下一個按鈕,當您單擊它時,它將帶您到第一張圖像。

這是我的桌子:

Gallery: id(int) primary key auto_increment, name varchar(255)
Photos : id(int) primary key auto_increment, path varchar(255), gallery_id int

Index.php:

<?php
$query=mysqli_query($conn,"SELECT*FROM gallery");
while($row=mysqli_fetch_array($query)){
$gallery_name=$row['name'];
$galleryid=$row['id'];
echo "<a href='gallery.php?id=$galleryid'>$gallery_name</a><br>";

}
?>

Gallery.php:

session_start();

<div class="piccontainer">
<?php
if(isset($_GET['id']) and is_numeric($_GET['id'])){
$id=$_GET['id'];
}else{
echo "<script>window.location.href='index.php'</script>";
}
$query=mysqli_query($conn,"SELECT*FROM gallery WHERE id='$id'");
while($row=mysqli_fetch_array($query)){
$gallery_name=$row['name'];
echo "<h2>".$gallery_name."</h2>";
}
$query=mysqli_query($conn,"SELECT*FROM photos WHERE gallery_id='$id'");
echo "<div><a class='nazad' href='index.php'>Back</a></div><br><br>";
while($row=mysqli_fetch_array($query)){
$pic_id=$row['id'];
$path=$row['path'];
$_SESSION['galleryid']=$row['gallery_id'];
echo "<div class='picholder'><a href='photo.php?id=$pic_id'><img src='uploads/$path'   /></a></div>";
}

?>
</div>

Photo.php:

session_start();

<div class="piccontent">
<?php
if(isset($_SESSION['galleryid'])){
$back=$_SESSION['galleryid'];
echo "<div><a class='nazad' href='gallery.php?id=$back'>Back</a></div><br><br>
";
}
?>
<?php
if(isset($_GET['id']) and is_numeric($_GET['id'])){
$id=$_GET['id'];

}else{
echo "<script>window.location.href='index.php'</script>";
} 
?>
<div id="links">
<?php
$prevquery=mysqli_query($conn,"SELECT id FROM photos WHERE id<$id AND gallery_id='$gid'");
while($row=mysqli_fetch_array($prevquery)){
$prev=$row['id'];
}
$nextquery=mysqli_query($conn,"SELECT id FROM photos WHERE id>$id AND gallery_id='$gid'");
while($rw=mysqli_fetch_array($nextquery)){
$next=$rw['id'];
}
$nextbtn=(isset($next))?"<a href='photo.php?id=$next'>Next</a>":"";
$prevbtn=(isset($prev))?"<a href='photo.php?id=$prev'>Prev</a>":"";
echo $prevbtn." ".$nextbtn;
?>
</div>
<?php
$query=mysqli_query($conn,"SELECT*FROM photos WHERE id='$id'");
while($row=mysqli_fetch_array($query)){
$path=$row['path'];


echo "<img src='uploads/$path' />";
}
?>
</div>

幫助將不勝感激

我想您需要一個ORDER BY和LIMIT 1才能獲得一行:

$prevquery=mysqli_query($conn,"SELECT id FROM photos WHERE id<$id AND gallery_id='$gid' ORDER BY id DESC LIMIT 1");

使用ASC ORDER對第二個查詢執行類似的操作。 無論如何,這種語法很糟糕,並且可以進行SQL注入。 使用准備好的語句! 我還建議嘗試使用嵌套子查詢,在該子查詢中可以包含對上一張和下一張照片ID的查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM