【问题标题】:HTML, PHP AND MYSQL pictures next to each otherHTML、PHP 和 MYSQL 图片彼此相邻
【发布时间】:2012-05-31 01:02:17
【问题描述】:

假设我的服务器上有许多由用户上传的图像。每张图片在数据库中也有一行,包含文件名、类别、文件大小、扩展名和位置等信息。

当我想显示这些图像时,我使用 mysql_query 和 while 循环。这行得通,但是图片都有不同的大小,它们彼此相邻或彼此下方显示,看起来非常糟糕。

假设我有 20 张这样的图片,我怎样才能将 5 张图片并排显示,4 行长???

【问题讨论】:

  • 我不太清楚你的意思...这不是布局问题而不是数据库问题吗?
  • @j08691 — 不,不是表格,它不是表格数据结构。
  • 这是一个布局问题,但我不知道上传了多少张图片。我只想显示 5 张图像并排显示。接下来的 5 张图片在那个下面,依此类推。
  • 可能重复 -> stackoverflow.com/questions/3791019/… 用于您的布局问题。建议使用我发布的链接中的答案。并使用表格,以便您可以在显示图像时为图像分配定义的高度和宽度。
  • 我绝对同意@Quentin。表格只能用于表格数据。这是一个布局问题,应该使用容器元素(例如 <div> 使用 CSS 定位和调整大小)来解决。

标签: php mysql html image show


【解决方案1】:

假设一个包含图像数据的数字索引对象数组:

<div class="row">
<?php
// loop through all my images taking the index and image object
foreach( $images as $idx=>$image ) {

    // If this isn't the 1st image & the modulus of 5 and $idx is 0, make a new row.
    if( $idx > 0 && !(5%$idx) ) {
        </div><div class="row">
    }
    // Print out the image
    echo '<img src="' . $image->filename . '" />';
} ?>
</div>

如果将第一个数字除以第二个数字,模数基本上就是余数。因此,当我们打印了 5 张图像时,5/5=1 没有余数,因此我们创建了一个新行。

我相信这会创造出类似的东西:

<div class="row">
<img src="img1.jpg" />
<img src="img2.jpg" />
<img src="img3.jpg" />
<img src="img4.jpg" />
<img src="img5.jpg" />
</div>
<div class="row">
<img src="img6.jpg" />
<img src="img7.jpg" />
<img src="img8.jpg" />
<img src="img9.jpg" />
<img src="img10.jpg" />
</div>

然后可以使用 CSS 设置样式:

<style type="text/css">
    div.row {
       clear:left;
    }
    div.row img {
       float:left;
    }
</style>

在调整图像大小时,您有两种选择:

  1. 简单的选项:在 CSS 中设置图像宽度(高度将相应缩放)。这并不完美,如果图像具有不同的纵横比(宽度与高度),仍然会显得凌乱。
  2. 使用 PHP 库(如 GD 或 imagick(imagemagick 之上的 PHP 层))调整大小(并在必要时进行裁剪)。我个人更喜欢 GD,因为它与 PHP 打包在一起,因此得到了更广泛的支持。也就是说,imagick 是更快、更简单的代码,所以这取决于你。 This site 很好地比较了两者的图像大小调整。

编辑:在回答您的问题时,您需要执行以下操作来获取图像数组:

<?php
// Build an array of images
$sql = 'SELECT * FROM images';
$result = mysql_query( $sql );

while( $obj = mysql_fetch_object( $result ) ) {
    $images[] = $obj;
}
?>

【讨论】:

  • 啊,是的,这就是我要找的。 $images 会是查询的结果吗?
  • 是的,经过一些后期处理 - 我已经整理了一个简单的示例并将其附加到我的答案中。
  • 尝试将所有图像放在同一行并向左浮动。它将使用正常的文档流自动换行。这样,它就可以扩展到父容器。
  • 是的,这也可以。我按照学生指定的 5 强制休息,但你的方法更好。
【解决方案2】:

伪代码

$i = 0;
while($row = mysql_fetch_object($result) {
   //displaying image
   ....
   if($i % 4 == 0) {
          echo '<BR>';
   }
   $i++;
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-03-08
  • 1970-01-01
  • 2014-09-03
  • 1970-01-01
  • 2013-04-22
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多