Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用php查看文件中的第一张图片?_Php_Mysql - Fatal编程技术网

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

如何使用php查看文件中的第一张图片?,php,mysql,Php,Mysql,嗨,我想知道如何显示用户上传的相册中的第一张图像。我有一个网站,允许用户将图像上传到相册,现在我想将相册中的第一张图片显示为相册封面,现在当用户单击相册页面时,显示的只是相册信息,如名称、说明等。我使用相册名称作为链接来查看相册中的图像,我想要的是相册中的第一个图像显示为指向该相册的链接。我有很多关于这方面的东西,但我会尽力提供一切,让你更容易理解。以下是我的相册页面代码: $albums = get_albums(); if(empty($albums)){ echo 'No Albums'

嗨,我想知道如何显示用户上传的相册中的第一张图像。我有一个网站,允许用户将图像上传到相册,现在我想将相册中的第一张图片显示为相册封面,现在当用户单击相册页面时,显示的只是相册信息,如名称、说明等。我使用相册名称作为链接来查看相册中的图像,我想要的是相册中的第一个图像显示为指向该相册的链接。我有很多关于这方面的东西,但我会尽力提供一切,让你更容易理解。以下是我的相册页面代码:

$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>';
}
}
现在我有点不知所措,不知道该通过什么途径来更改打开相册的链接,从相册名称到相册中的第一张图像。如果相册中没有任何图片,我计划使用一个简单的If语句来显示一个通用的空文件夹图像。我的数据库使用两个表来上传图像,第一个是相册表,第二个是图像表。我还有一个时间戳字段,用于插入图像上载时间戳,因此我可以返回该相册中的图像以及具有最低时间戳的图像,以便返回上载到相册的第一个图像吗?是否有SELECT语句返回此值?我还创建了一个文件夹,将这些图像存储在相应的相册中,我可以返回该相册中的第一个图像吗?实现这一目标最简单的方法是什么

以下是我获取图像路径的方式:

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文件:

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>] ';
}
}
if(!isset($_GET['album_id'])|空($_GET['album_id'])|相册检查($_GET['album_id'])==false){
标题('Location:albums.php');
退出();
}
$album\u id=$\u GET['album\u id'];
$album_data=album_data($album_id,'name');
echo“”,$album_数据['name'],'';
包括“includes/menu_album.php”;
$images=获取图片($album\u id);
if(空($images)){
回应“没有图像”;
}否则{
foreach($images作为$image){
回声“[]”;
}
}

实际上,使用现有查询很快就能获得第一张图像。您只需将图像名称或路径添加到
选择
中,并将图像时间戳添加到
订单中即可
,以确保获得最早的图像:

$albums\u query=mysql\u query(“
挑选
`相册`.`album\u id`,
`相册`.`时间戳`,
`专辑`.`name`,
左(`albums`.`description`,50)为`description`,
将(`images`.`images\u id`)计数为`images\u COUNT`,
CONCAT(`images`.`images\u id`、`images`.`ext`)作为`first\u image``
从`专辑`
左连接图像`
在'albums'上。'album\u id`='images`.'album\u id``
其中`albums`.`user\u id`='$\u SESSION['user\u id']
按'albums'分组。'album\u id`
按“相册”排序。`timestamp`ASC,`images`。`timestamp`ASC
");
如果(!$albums\u查询){
die('无效查询:'.mysql_error());
}
而($albums\u row=mysql\u fetch\u assoc($albums\u query)){
$albums[]=数组(
'id'=>$albums\u行['album\u id'],
“时间戳”=>$albums\u行[“时间戳”],
“名称”=>$albums\u行[“名称”],
'description'=>$albums\u行['description'],
“计数”=>$albums\u行[“图像计数”],
'image'=>$albums\u行['first\u image']
);
}
然后,您可以更新输出以包括图像:

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>';
}
foreach($albums作为$album){
if(空($album['image'])){
$album['image']='default.jpg';
}
回声'
(“,$album['count'],'图像)
“,$album['description'],”…
/

'; }
很抱歉,我弄糊涂了,我看到了逻辑,但我的表中$albums数组下没有字段图像。您添加了一个图像字段,不确定是否要我将该字段添加到表中?我不明白这是怎么回事,对不起,我肯定我错过了什么。它说即使在我添加了一张相册之后也没有相册,我之前的代码工作得很好,我只是想添加第一张图片作为链接。我现在得到了这个错误:警告:mysql_fetch_assoc()希望参数1是resource,布尔值在C:\xampp\htdocs\lr\func\album.func.php的第36行No album中给出。图像字段应该是images表中的图像位置,在SQL中它是
左连接到相册表的。我不知道您的
图像
表中有哪些字段,所以我猜是
文件名
。您需要调整代码以处理实际的表。由于SQL中的错误,您将收到一个错误,我已在我的答案中添加了一个错误检查,以便您可以查看出问题所在。您已经有一个名为images
LEFT JOIN images
的表,因此您有该表中的图像字段这里是我有图像的字段:images\u id、user\u id、album\u id、timestamp,和ext。它们都是int,但ext获得文件扩展名。图像id是主键。在albums表中,我有:album_id、user_id、timestamp、name、description(前50个字符)。name和description是varchar。相册id是主键。这有意义吗?谢谢亚伦。你能告诉我你是如何从图片表中导出文件名的吗?这只是一个可用性评论,用户似乎被他们上传的第一张图片作为封面所困扰。你不想让用户选择哪张专辑封面吗?它只是表
cover
中的一个额外的二进制字段。
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>';
}