从php中的文件夹中获取图像列表,并填充图像src标记


get image list from folder in php and populate image src tags

我正在尝试编写一个简单的(对某些人来说)脚本,该脚本将在上传的文件夹中获取图像,然后在适当的位置用文件名填充我的html文档。我已经成功地将文件名上传并写入数据库(不确定是否需要该部分)。我很想知道如何最好地实现这一点。到目前为止,我已经尝试了好几种方法,但没有成功。

<?php
 $hote = 'localhost';
 $base = '*****';
 $user = '*****';
 $pass = 'testuser2012';
 $cnx = mysql_connect ($hote, $user, $pass) or die(mysql_error ());
 $ret = mysql_select_db ($base) or die (mysql_error ());
 $image_id = mysql_real_escape_string($_GET['ID']);
 $sql = "SELECT image FROM image_upload WHERE ID ='$image_id'";
 $result = mysql_query($sql);
 $image = mysql_result($result, 0);
 header('Content-Type: text/html');
 echo '<img src="' . $image . '"/>';
 exit;
 ?>

但是,也许我应该解释一下完整的功能:我需要用户将他们的图像上传到他们的文件夹中,然后当调用PHP图像库时,用该文件夹中的图像填充它。我不确定我是否正确,我应该从文件夹中读取文件列表吗?或者将名称写入数据库并从中提取。。。这就是我的问题所在上面的代码是我试图使用的,虽然它会返回文件名,但不会在标记中回显它。。。不确定我的无能在哪里:)

我试图填充的html如下:

<div class="slide">
                <div class="image-holder">
                   <img src="img/asoft_table.jpg" alt="" /> 
                </div>
                <div class="info">
                    <p>Morbi a tellus lorem, id scelerisque ligula. Maecenas vitae turpis et.</p>
                </div>
            </div>
            <div class="slide">
                <div class="image-holder">
                    <img src="img/soft_table.jpg" alt="" />
                </div>
                <div class="info">
                    <p>Sed semper, lorem ac lobortis bibendum, magna neque varius augue, vel accumsan.</p>
                </div>
            </div>
            <div class="slide">
                <div class="image-holder">
                    <img src="img/living_room2.jpg" alt="" />
                </div>

如果您只查看一个目录,那么您的图像路径将是静态的。如果您的数据库中存储了图像名称,您可以简单地预生成一个小查询,该查询输出文件名并附加静态路径。

$result = mysql_query("SELECT * FROM Images");
while($row = mysql_fetch_array($result)) {
  echo "<img src='/path/to/images/".$row['image_name']."'/>";
}

为了分解这里到底发生了什么——实际上MySQL查询存储在$result中。然后,我创建了一个while循环,循环遍历MySQL查询返回的数组。这个数组看起来像这样:

  0 => 'id' => 1, 
       'file_name' => 'foo.jpg',
       'file_size' => '36.6 kb',
       'time_stamp' => '14/01/02',
  1 => 'id => 2,
       'file_name' => 'bar.jpg',
       'file_size' => '12.8 kb',
       'time_stamp' => '14/01/03'

对于每个索引,while将输出其嵌套数组。在这种情况下,它将是数据库行。然后,我想为每个数据库行echo输出一个图像标签,并将图像的名称附加到标签上。

在HTML中,您为每个图像创建了一个元素块。因此,在一个静态页面上,如果你有100个图像,你就必须将HTML块重复100次。有了编程,你就不必这么做了。在我的示例中,MySQL将返回一个大的array,其中包含您的每个图像及其行。因此,如果您有一个包含100个图像的表,那么array将有100个项目,因此while循环将运行并打印100次。跟随

因此,使用HTML,您的代码将如下所示:

<? while($row = mysql_fetch_array($result)) ?>
<div class="slide">
  <div class="image-holder">
    <? echo "<img src='img/".$row['image_name']."' alt='' />"; ?>
  </div>
  <div class="info">
    <p>
      <? echo $row['image_description']; ?>
    </p>
  </div>
</div>
<? endwhile; ?>

因此,正如您所看到的,您创建了一个HTML块,PHP将根据返回的变量循环并为您填充。

如果你想按日期/大小排序,你可以在上传时确定这些变量,并将它们附加到数据库中的一列中。在表中有一个时间戳和一个索引将大大有助于从数据库输出中排序。我会这样安排我的桌子:

+----+-----------+-----------+------------+
| id | file_name | file_size | time_stamp |
+----+-----------+-----------+------------+
| 1  | foo.jpg   |  36.6 kb  | 14/01/02   |
+----+-----------+-----------+------------+

尽管将文件信息存储在数据库中而不是遍历/解析目录可能是您的最佳选择,但您仍然可以在此处查看此页面以获取有关目录方法和序列的信息。

编辑:您还可以查看Tizag,它为学习PHP的人提供了全面的教程和资源。

编辑:要回答您关于如何将信息放在正确位置的问题:这是一个非常广泛的问题,有各种各样的答案。简而言之,这取决于你想如何订购它们以及你想让它们去哪里。您可以使用MySQL查询以特定方式对输出的数据进行排序。您还可以使用包含方法在整个网站上分解和排序您的数据。