获得上一个和下一个按钮工作

时间:2015-06-30 07:48:26

标签: php mysql pdo

所以我最近开始学习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,next 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>':'';

1 个答案:

答案 0 :(得分:1)

您的代码中存在许多问题:

  1. prepare方法不会直接返回结果。它返回一个可执行语句。他们需要明确执行。
  2. 使用预准备语句,您应该将$image_id放在准备好的语句中,而不是在准备之前附加它。
  3. 方法fetch()不会返回$prev_id$next_id。相反,它返回一个结果行。默认情况下,它应该是一个关联的数组,其键等于行中的字段。
  4. 修复代码应该是这样的:

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