首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用php查看文件中的第一张图片?

如何使用php查看文件中的第一张图片?
EN

Stack Overflow用户
提问于 2012-07-31 07:32:18
回答 1查看 872关注 0票数 2

嗨,我正在尝试弄清楚如何显示用户上传的相册中的第一张图像。我有一个网站,让用户上传图像到相册,现在我想显示相册中的第一张图片作为相册封面,现在当用户点击相册页面时,所有显示的都是相册信息,如名称,描述等,我使用相册名称作为链接来查看相册中的图像,我想要的是相册中的第一张图像显示为该相册的链接。我有很多东西正在与此,但我会尝试并提供一切,以便您可以更容易地理解。这是我的相册页面代码:

代码语言:javascript
复制
$albums = get_albums();

if(empty($albums)){
echo 'No Albums';
}else{

foreach($albums as $album){
    echo '<p><a href="view_album.php?album_id=', $album['id'] ,'">', $album['name'],'</a>(', $album['count'], ' images) <br />
    ', $album['description'], '...<br />
    <a href="edit_album.php?album_id=', $album['id'] , '">Edit</a> / <a href="delete_album.php?album_id=', $album['id'] , '">Delete</a>
    </p>';
}
}

下面是我的函数php文件中的函数,我将其包含在此文件中:

代码语言:javascript
复制
function get_albums(){
$albums = array();

$albums_query = mysql_query("
SELECT `albums`.`album_id`, `albums`.`timestamp`, `albums`.`name`, LEFT(`albums`.`description`, 50) as `description`, COUNT(`images`.`image_id`) as `image_count`
FROM `albums`
LEFT JOIN `images`
ON `albums`.`album_id` = `images`.`album_id`
WHERE `albums`.`user_id` = " . $_SESSION['user_id'] . "
GROUP BY `albums`.`album_id`
");

while($albums_row = mysql_fetch_assoc($albums_query)){
    $albums[] = array(
        'id'            => $albums_row['album_id'],
        'timestamp'     => $albums_row['timestamp'],
        'name'          => $albums_row['name'],
        'description'   => $albums_row['description'],
        'count'         => $albums_row['image_count']
    );
}

return $albums;

}

现在我有点迷茫,不知道该怎么做才能将打开相册的链接从相册名称切换到相册中的第一张图片。如果相册中没有任何图片,我计划使用一个简单的If语句来显示一个通用的空文件夹图像。我的数据库使用两个表来上传图片,第一个是相册表,第二个是图片表。我还有一个插入图像上传时间戳的时间戳字段,所以我可以返回该相册中的图像和时间戳最低的图像,以便返回上传到相册的第一张图像吗?有没有一条SELECT语句来返回它?此外,我还创建了一个文件夹,将这些图像存储在相应的相册中,我可以返回该相册中的第一张图像吗?实现这一目标的最简单方法是什么?

下面是获取镜像路径的方法:

代码语言:javascript
复制
function get_images($album_id){
$album_id = (int)$album_id;

$images = array();

$image_query = mysql_query("SELECT `image_id`, `album_id`, `timestamp`, `ext` FROM `images` WHERE `album_id` = $album_id AND `user_id` = ". $_SESSION['user_id']);
while($images_row = mysql_fetch_assoc($image_query)){
    $images[] = array(
        'id'            => $images_row['image_id'],
        'album'         => $images_row['album_id'],
        'timestamp'     => $images_row['timestamp'],
        'ext'           => $images_row['ext']
    );
}
return $images;
}

这是我的view_album.php文件:

代码语言:javascript
复制
if(!isset($_GET['album_id']) || empty($_GET['album_id']) || album_check($_GET['album_id']) === false){
header('Location: albums.php');
exit();
}

$album_id = $_GET['album_id'];
$album_data = album_data($album_id, 'name');

echo '<h1 class="logo2">', $album_data['name'], '</h1>';
include 'includes/menu_album.php';

$images = get_images($album_id);

if(empty($images)){
echo 'No images.';
}else{
foreach($images as $image){
    echo '<a href="uploads/', $image['album'], '/', $image['id'], '.',     $image['ext'], '"><img src="uploads/thumbs/', $image['album'], '/', $image['id'], '.', $image['ext'], '" title="Uploaded ', date('D M Y', $image['timestamp']), '"></a> [<a       href="delete_image.php?image_id=', $image['id'], '">x</a>] ';
}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-31 09:28:44

实际上,您已经非常接近使用现有查询获取第一张图像了。您需要做的就是将镜像名称或路径添加到SELECT,并将镜像时间戳添加到ORDER BY,以确保您获得最早的时间戳:

代码语言:javascript
复制
   $albums_query = mysql_query("
        SELECT 
          `albums`.`album_id`, 
          `albums`.`timestamp`, 
          `albums`.`name`, 
          LEFT(`albums`.`description`, 50) as `description`, 
          COUNT(`images`.`image_id`) as `image_count`, 
          CONCAT(`images`.`image_id`, '.', `images`.`ext`) AS `first_image`
        FROM `albums`
        LEFT JOIN `images`
        ON `albums`.`album_id` = `images`.`album_id`
        WHERE `albums`.`user_id` = " . $_SESSION['user_id'] . "
        GROUP BY `albums`.`album_id`
        ORDER BY `albums`.`timestamp` ASC, `images`.`timestamp` ASC
    ");

    if (!$albums_query) {
      die('Invalid query: ' . mysql_error());
    }

    while($albums_row = mysql_fetch_assoc($albums_query)){
        $albums[] = array(
            'id'            => $albums_row['album_id'],
            'timestamp'     => $albums_row['timestamp'],
            'name'          => $albums_row['name'],
            'description'   => $albums_row['description'],
            'count'         => $albums_row['image_count'],
            'image'         => $albums_row['first_image']
        );
    }

然后,您可以更新您的输出以包括图像:

代码语言:javascript
复制
foreach($albums as $album){
    if (empty($album['image'])) {
        $album['image'] = 'default.jpg';
    }
    echo '<p>
      <a href="view_album.php?album_id=', $album['id'] ,'">
        <img src="uploads/thumbs/', $album['id'] ,'/', $album['image'] ,'" />', $album['name'],'
      </a>(', $album['count'], ' images) <br />
      ', $album['description'], '...<br />
      <a href="edit_album.php?album_id=', $album['id'] , '">Edit</a> / <a href="delete_album.php?album_id=', $album['id'] , '">Delete</a>
    </p>';
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11731150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档