0
因此,我最近开始学习PHP和PDO。当我阅读一些教程时,我创建了一个包含2页的简单网站。 index.php
和single.php
。在索引页面上,我从数据库加载图像(这已完成)。然后,当我点击单张图像时,请转至显示此图像的single.php
(也是这样做的)。现在我正在尝试为数据库中的下一个和上一个图像制作按钮。我不太确定这是如何工作的,但在阅读了一些教程后,我想我已经明白了。获取上一个和下一个按钮的工作
这是在其重定向到single.php
<a href="single.php?image_id='.$row['image_id'].'">
<img src="'.$row['image_name'].'"/>
</a>
这里index.php
链路single.php
(的一部分)
if(isset($_GET['image_id']) && is_numeric($_GET['image_id']))
{
$image_id = $_GET['image_id'];
$result = $pdo->prepare("SELECT * FROM images WHERE image_id= ? LIMIT 1");
if ($result->execute(array($_GET['image_id'])))
{
if($row = $result->fetch())
{
$update = $pdo->prepare("UPDATE images SET image_hits = image_hits + 1 WHERE image_id = ?");
$update->bindParam(1, $_GET['image_id'], PDO::PARAM_INT);
$update->execute();
echo ' // image data ';
}
}
}
如果我理解正确的是如何工作的,我需要电流id应该是image_id
,下一个id和prev id。这听起来很简单..但不适合我。我有我需要这样的东西,但问题是在哪里以及如何将它实现到当前的代码中?
$result = $pdo->prepare("SELECT image_id FROM images WHERE image_id > $image_id ORDER BY image_id ASC LIMIT 1");
if($result){
$next_id = $result->fetch();
}
//get previous picture id
$result = $pdo->prepare("SELECT image_id FROM images WHERE image_id < $image_id ORDER BY image_id DESC LIMIT 1");
if($result){
$prev_id = $result->fetch();
}
if($result){
//construct next/previous button
$prev_button = (isset($prev_id) && $prev_id>0)?'<a href="#" data-id="'.$prev_id.'"><img src="prev.png" /></a>':'';
$next_button = (isset($next_id) && $next_id>0)?'<a href="#" data-id="'.$next_id.'"><img src="next.png" /></a>':'';
谢谢你的答案。这部分代码应该放在哪里?在if语句之后if($ result-> execute(array($ _ GET ['image_id'])))还是别的地方? – Jared
'execute'中的输入参数应该是一个assoc数组。密钥应该与准备好的查询字符串中的占位符相匹配。例如,因为我使用':image_id'作为SQL字符串中的占位符,所以我在执行中使用了'array(':image_id'=> $ image_id)'。您可以阅读[相关文档](http://php.net/manual/en/pdostatement.execute.php)以供进一步学习。 –
好的,我已经几乎可以工作,但是next和prev链接存在问题。这就像'http:// localhost/sitefolder/2 /'应该是'http://localhost/single.php?image_id = 2'。我如何得到这个?我没有.htaccess或可以重写URL的东西? – Jared