【问题标题】:Mysql image gallery with next and previous带有下一个和上一个的 Mysql 图像库
【发布时间】:2014-11-07 03:45:40
【问题描述】:

我正在制作一个照片库,您可以在其中查看完整尺寸的图像,我想要 它具有下一个和上一个按钮来循环浏览完整尺寸的图像。 到目前为止,我设法使它工作,但是当我删除和 重新上传一张图片。

问题是当我打开图片所在的画廊时 已删除并重新上传,当我单击图像以全尺寸查看时 我的下一个按钮消失了,只有一个上一个按钮可以带您进入 画廊中的最后一张图片,然后出现下一个按钮,它会带你 点击第一张图片。

这是我的桌子:

图库:id(int) 主键 auto_increment,名称 varchar(255) 照片:id(int) 主键 auto_increment、path varchar(255)、gallery_id int

索引.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>";

}
?>

图库.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>

照片.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>

我们将不胜感激

【问题讨论】:

  • 把这个SELECT*FROM 分开——这是错误的形式。 SELECT * FROM
  • 旁注:您确实将session_start(); 封装在&lt;?php ?&gt; 标签中,对吗?如果没有,请执行。
  • 是会话在另一组php标签中

标签: php mysql


【解决方案1】:

我猜你需要一个 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 的查询。

【讨论】:

  • 我尝试了 $prevquery 和 $nextquery 的代码,结果与我目前所拥有的相同。我没有尝试过嵌套子查询,因为我不知道它们应该是什么样子
猜你喜欢
  • 2018-07-22
  • 2013-12-21
  • 1970-01-01
  • 2013-12-12
  • 2011-05-09
  • 1970-01-01
  • 1970-01-01
  • 2011-12-14
  • 1970-01-01
相关资源
最近更新 更多