gpt4 book ai didi

php - 让上一个和下一个按钮正常工作

转载 作者:行者123 更新时间:2023-11-29 12:08:05 25 4
gpt4 key购买 nike

所以我最近开始学习PHP和PDO。当我阅读一些教程时,我创建了一个包含 2 个页面的简单网站。 index.phpsingle.php。在索引页面上,我从数据库加载图像(已完成)。然后,当我单击单个图像时,将转到显示该图像的 single.php (也执行此操作)。现在我正在尝试为数据库中的下一张和上一张图像制作按钮。我不太确定这是如何工作的,但在阅读了一些教程后,我想我已经明白了。

这是 index.php 上的链接,重定向到 single.php

<a href="single.php?image_id='.$row['image_id'].'">
<img src="'.$row['image_name'].'"/>
</a>

这里是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 和上一个 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>':'';

最佳答案

您的代码中有很多问题:

  1. prepare 方法不会直接返回结果。它返回一个可执行语句。它们需要显式执行。
  2. 对于准备好的语句,您应该将 $image_id 放入准备好的语句中,而不是在准备之前附加它。
  3. 方法 fetch() 不会返回 $prev_id$next_id。相反,它返回一个结果行。默认情况下,它应该是一个关联数组,其键等于行中的字段。

要修复您的代码,应如下所示:

// get next picture id
$stmt = $pdo->prepare('SELECT image_id FROM images WHERE image_id > :image_id ORDER BY image_id ASC LIMIT 1');
if($stmt){
$stmt->execute(array(':image_id' => $image_id));
if (($row = $result->fetch()) !== FALSE) {
$next_id = $row['image_id'];
}
}

// get previous picture id
$stmt = $pdo->prepare('SELECT image_id FROM images WHERE image_id < :image_id ORDER BY image_id DESC LIMIT 1');
if($stmt){
$stmt->execute(array(':image_id' => $image_id));
if (($row = $result->fetch()) !== FALSE) {
$prev_id = $row['image_id'];
}
}

// 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>':'';

关于php - 让上一个和下一个按钮正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31132522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com