2

こんにちは、ユーザーがアップロードしたアルバムの最初の画像を表示する方法を見つけようとしています。ユーザーが画像をアルバムにアップロードできる Web サイトがあります。アルバムの最初の写真をアルバム カバーとして表示したいのですが、ユーザーがアルバム ページをクリックすると、名前、説明などのアルバム情報だけが表示されます。など、アルバム名をリンクとして使用してアルバム内の画像を表示しましたが、アルバム内の最初の画像をそのアルバムへのリンクとして表示する必要があります。私はこれについて多くのことを行っていますが、あなたがより簡単に理解できるようにすべてを提供しようとします. これが私のアルバムページのコードです:

$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ファイルの関数は次のとおりです。

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 ステートメントを使用して、一般的な空のフォルダー イメージを表示する予定です。私のデータベースは、2 つのテーブルを使用して画像をアップロードします。1 つ目はアルバム テーブルで、2 つ目は画像テーブルです。画像のアップロード タイムスタンプを挿入するタイムスタンプ フィールドもあります。アルバムにアップロードされた最初の画像を返すために、そのアルバムの画像とタイムスタンプが最も低い画像を返すことはできますか? これを返す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>] ';
}
}
4

1 に答える 1

2

実際には、既存のクエリで最初の画像を取得するのにかなり近づいています。イメージ名またはパスを に追加しSELECT、イメージのタイムスタンプを に追加しORDER BYて、最も古いものを確実に取得するために必要なことは次のとおりです。

   $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']
        );
    }

次に、出力を更新して画像を含めることができます。

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>';
}
于 2012-07-31T01:28:44.250 に答える