【问题标题】:How MySql can retrieve and display photos with PHPMySql 如何使用 PHP 检索和显示照片
【发布时间】:2012-11-06 21:32:51
【问题描述】:

我有一个 PHP 网站,我在本地上传了 10 张图片。图片保存在./images 文件夹中,并重新采样到./thumbnails 文件夹中。我使用此查询从数据库中提取 7 个照片文件名。

$imgQuery = "SELECT FileName, Title, Description FROM PICTURE WHERE OwnerID='$id' LIMIT 0,7";

数据库为图片保存PictureID(PK)、OwnerID(UNQ,我的id是2)、FileName(存储文件名)和Title,为图片保存Description。我使用这种方法将 7 个照片文件名、标题和描述传输到一个数组。但是如何从我的./thumbnails 文件夹中提取它们并将它们显示在我的 PHP 页面上?

if($imgResult = mysqli_query($link, $imgQuery))
{
 while($imgRow = mysqli_fetch_row($imgResult))
 {

    $filename[] = $imgRow[0];
    $title[] = $imgRow[1];
    $description[] = $imgRow[2];
 }
}

这是我在正文中显示缩略图t1 的位置。我想知道如何将我的数据库检索到的文件分配给这些变量。描述会根据我的名字而变化

$num = count($filename);
while($i < $num)
{
$i = 0;
print <<<photo
<body>
<form action='MyAlbum.php' method='post'>
    <table>
        <tr><td colspan='7' ><h2 align='center'><?php echo $name;?>'s Album</h2></td>
        </tr>
        <tr><td colspan='7' ><?php echo $title[$i];?></td>
        </tr>
        <tr><td colspan='5' ><?php echo $filename[$i]; ?></td><td colspan='2'><?php echo $description[$i];?> </td>
        </tr>
        <tr>
            <td><?php  echo $filename[0];?></td> <td><?php  echo $filename[1];?></td> <td><?php echo $filename[2];?></td> 
            <td><?php echo $filename[3]; ?></td><td><?php echo $filename[4]; ?></td> <td><?php echo $filename[5]; ?></td> 
            <td><?php echo $filename[6]; ?></td> 
        </tr>
    </table>
</form>
$i++;
</body>
</html>

photo;
 }

【问题讨论】:

  • 您使用的是mysqli,所以请使用它支持的proper SQL placeholders。这个 SQL 注入错误没有任何借口。
  • mysqli 是我被教导使用的。假设它在本地与 AMPPS 一起工作得很好。或者你的意思是我需要使用一些stmt
  • 我的意思是你应该永远在你的查询中看到像OwnerID='$id'这样的东西。相反,您应该拥有OwnerID=?,然后调用bind_param 来分配the documentation 中的值。你的所作所为非常鲁莽,最终会给你带来严重的麻烦。

标签: php mysql file variables


【解决方案1】:

这完全取决于你没有说的两件事:全分辨率保存在“文件名”中的文件名,thumbnails 中分配的名称是什么? FileName 是否包含完整路径,还是仅包含“裸”文件名?

// If
// FileName = "/images/LenaSjooblom.jpg", thumbnail is "./thumbnails/LenaSjooblom.jpg"
// Then
$Thumbnail = './thumbnails/' . basename($FileName);

// If
// FileName = "LenaSjooblom.jpg", thumbnail is "./thumbnails/LenaSjooblom.jpg"
// Then
$Thumbnail = './thumbnails/' . $FileName;

// If
// FileName = "/images/LenaSjooblom.jpg", thumbnail is "./thumbnails/12.jpg"
// Then
$Thumbnail = './thumbnails/' . $PictureID . '.jpg';

您将上面的代码放入同一个循环中,例如:

$filename[] = $imgRow[0];
$title[] = $imgRow[1];
$description[] = $imgRow[2];

// ADDED THUMBNAIL - hypothesis 1
$thumbnail[] = "./thumbnails/".basename($imgRow[0]);

并且可以显示

<img src="$thumbnail[$i]" />

更新

如果您的缩略图是文件名的副本,那么您不需要其他任何东西 - 您只需更改 HTML,然后添加:

<img src="./thumbnails/$filename[$i]" />

它会指示浏览器获取与图像名称相同的文件名,但来自缩略图目录。 (如果一开始不起作用,请检查路径;在紧要关头,使用绝对路径,例如“/thumbnails/$filename[$i]”)。

【讨论】:

  • 数据库中的文件名只是严格的文件名。 ./images文件夹中的文件名与./thumbnails文件夹相同。
  • 很方便!更新了答案。
  • 谢谢我之前把循环放错了地方。所以现在应该可以了。
【解决方案2】:

你可以这样做

<img src="<?php echo $filePath;?>" alt="some_text">

只需确保 $filePath 的变量是文件夹中实际图像的 url

【讨论】:

  • 如果我使用它,那么我将不得不扫描我的./thumbnails 目录并搜索与我的选择查询相同的$filenames 文件名。这是我最后的手段,而且非常复杂。
  • 只需将文件路径保存在数据库中即可。 "
猜你喜欢
  • 2012-06-05
  • 2013-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-30
  • 2019-11-06
  • 2011-07-08
  • 2020-12-21
相关资源
最近更新 更多