【问题标题】:PHP select images and show the main image if existPHP选择图像并显示主图像(如果存在)
【发布时间】:2021-01-11 19:50:53
【问题描述】:

目前我使用 2 个语句从我的数据库中选择数据,但我确信只有一个语句是可能的,我只是不知道如何。我的数据库中有 id、productid、thumbnailimage、is_mainimage。 'is_mainimage' 单元格可以是 0 或 1。如果它是主图像,则为 1。我想选择所有图像,但如果有主图像,则仅在引导卡上显示主图像。如果没有,则显示我文件夹中的静态图像。如果用户点击卡片,它应该显示一个带有其他图像的模式。 这是atm的样子:

// Thumbnail images
$sql2 = "SELECT * FROM images WHERE productid=?";
$stmt = $link->prepare($sql2);
$stmt->bind_param("i", $productid);
$productid = $row['id'];
$stmt->execute();
$result2 = $stmt->get_result();
$data = $result2->fetch_all(MYSQLI_ASSOC);

// Main image
$sql3 = "SELECT * FROM images WHERE productid=? AND is_mainimage=?";
$stmt2 = $link->prepare($sql3);
$stmt2->bind_param("ii", $productid, $is_mainimage);
$productid = $row['id'];
$is_mainimage = 1;
$stmt2->execute();
$result3 = $stmt2->get_result();
$data2 = $result3->fetch_all(MYSQLI_ASSOC);

显示主图像或静态“no-image.png”的卡片顶部

<?php
$num_rows = mysqli_num_rows($result3);
if ($num_rows == 1) {
    foreach ($data2 as $rec2) {
        $mainimage = $rec2['thumbnailimage'];
    }
} else {
    $mainimage = "images/no-image.png";
}

echo "<img src='" . $mainimage . "' class='card-img-top' alt='Main Image'/>";

所以我的问题是,如何只选择一个才能使用剩余的图像?

【问题讨论】:

  • $is_mainimage 在哪里定义?这是在此处显示的第一个 sql 命令之前吗?如果是,那么第一个命令是多余的,$productid 最初定义在哪里,为什么使用它作为输入查询数据库只是为了从查询中准确返回那条数据?
  • 我用$is_mainimage = 1 给了它一个值,因为我需要主图像语句中的那些。
  • 对不起,我不确定我是否理解你。你能在我的代码上显示我应该改变什么吗?
  • 如果您将查询更改为:SELECT * FROM images WHERE productid = ? ORDER BY is_mainimage DESC,您将获得该产品的所有图片,其中is_mainimage 设置为1 的图片作为第一个结果。
  • 如果我需要模态框上的其余部分,如何仅在卡上显示主图像?没有图片怎么处理?

标签: php html mysqli


【解决方案1】:

有很多方法可以做到这一点。您可以选择最适合您的控制结构。例如,您可以将查询更改为:

SELECT productid, 
    group_concat(if(is_mainimage, thumbnailimage, null)) as mainImage,
    group_concat(if(is_mainimage, null, thumbnailimage)) as thumbnails
FROM images 
WHERE productid = ?
GROUP BY productid

这将为您提供一行产品ID,主图像为文件或null,缩略图与分隔符连接在一起(您可以指定要使用的分隔符)。在这种情况下,您将检查 mainImage 是否为空,如果是,则使用您的默认图像。然后对于缩略图,您将在分隔符上将它们分解,然后使用该数组填充您的其他图像。

或者,你可以

SELECT * FROM images WHERE productid = ?

然后对结果做这样的事情:

$main = false;
$thumbnails = [];

while($row = $results->fetch_assoc()) {
    $image = $row['thumbnailimage'];
    if($row['is_mainimage']) { $mainimage = $image; }
    else { $thumbnails[] = $image; }
}

你最终会得到 $mainimage 要么是图像,要么是假的,以及其他图像的数组。然后您可以检查 $mainimage 的值并在需要时强制使用默认值:

if(!$mainimage) { $mainimage = 'images/no-image.png'; }

然后使用 $thumbnails 数组为您的其他图像生成 html。

有很多方法可以设置它。只是取决于什么对你最有意义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 2023-01-04
    • 2020-11-13
    • 2012-07-23
    相关资源
    最近更新 更多