【问题标题】:Show multiple picture from database php显示来自数据库 php 的多张图片
【发布时间】:2013-08-09 14:03:22
【问题描述】:

我想知道如何在 php 文档上显示多张来自数据库的图片。我知道将图片放入 mysql 并取出其中一个,但我不知道如何取出多个(或全部)。提前致谢。

我的一个 php 文件看起来像这样

<html>
<head>
<title>Upload</title>
</head>

<form action='pictureuploadtest.php' method='POST' enctype='multipart/form-data'>
File: <input type='file' name='fileone'>
<input type = 'submit' name='submitfile'>
</form>

<?php
$con = mysql_connect("localhost", "username", "password") or die("Cannot connect: ".mysql_error());
mysql_select_db("testpicture") or die("Cannot connect to db: ".mysql_error());

$file = $_FILES['fileone']['tmp_name'];

if(!isset($file)) {
print "Choose an image";
} else {
$image = addslashes(file_get_contents($_FILES['fileone']['tmp_name']));
$imagename = addslashes($_FILES['fileone']['name']);
$imagesize = getimagesize($_FILES['fileone']['tmp_name']);


if($imagesize === false) {
echo "Invalid image.";
} else {
$insert = "INSERT INTO upload VALUES ('', '$imagename', '$image')";
if(mysql_query($insert, $con)) {
    $lastid = mysql_insert_id();
    echo "Image uploaded. <p /> Your image: <p /> <img src=getpic.php?id=$lastid width='300px' height='300px'>";
} else {
    echo "Cannot upload image: ".mysql_error();
}
}
}


?>

</html>

然后getpic.php看起来像这样

<?php
mysql_connect("localhost", "username", "password") or die("Cannot connect: ".mysql_error());
mysql_select_db("testpicture") or die("Cannot connect to db: ".mysql_error());


$id = addslashes($_REQUEST['id']);

$image = mysql_query("SELECT * FROM upload WHERE id=$id");
$image = mysql_fetch_assoc($image);
$image = $image['image'];


echo $image;

?>

所以这段代码可以告诉用户上传一张图片,然后在将其添加到数据库后显示该图片,但是我如何在数据库中显示多张或所有图片。

提前致谢。

【问题讨论】:

  • 帮自己一个忙,不要将图像放在数据库中,只是它们的名称\路径
  • 这是正确的:不要将图像存储在数据库中。但我在下面为您的问题提供了技术答案:)

标签: php html mysql database image


【解决方案1】:

好的,这是一些您可以遵循的非常基本的代码,但请阅读最后的BOLD NOTE

您可以像这样使用多个文件输入:

<input type='file' name='fileone'>
<input type='file' name='filetwo'>
...

然后你会为每个上传的文件调用你的插入(或者最好是循环,但这更符合上面的多个输入):

$file = $_FILES['fileone']['tmp_name'];
... the rest of the insert code ...

$file = $_FILES['filetwo']['tmp_name'];
... the rest of the insert code ...

然后你会在拉出图像时循环选择:

while ($row = mysql_fetch_assoc($image)) {
... the rest of your fetch code ...
}

但您不应该(几乎不)将图像存储在数据库中!

出于以下几个原因,图像应该存储在文件系统中:

  1. 文件系统将更高效、更快:系统上带有 Web 服务器的文件系统上的图像可以直接将图像从文件系统拉到 Web 服务器,然后再发送给用户。在数据库中,它更多的是从文件系统,通过数据库层,(可能通过网络)到网络服务器,再到用户。
  2. 你不想打扰你的数据库)它可以做各种令人敬畏和令人印象深刻的事情,比如连接和子选择——如果它没有被浪费在直接提取大的二进制图像块上)像存储和检索图像这样微不足道的事情.
  3. 使用数据库的效率较低(在磁盘空间上),尽管随着存储成本接近 0,这确实变得越来越少。

【讨论】:

  • 将图像存储在数据库中的原因有很多...示例包括负载平衡环境(即:多个 Web 服务器)和简单的记录完整性,因为单独保存数据库服务器的备份远比保持数据库服务器和文件系统的备份同步。
  • 对数据库进行负载平衡(在服务器本身上)比通过简单地添加另一个 Web 服务器并执行一些循环传递来实现负载平衡要困难得多。您可以为此使用共享或 rsynced 文件系统。使用数据库的唯一真正原因是如果您想对图像进行版本控制并在数据库中对它们进行删除标志或其他东西。互联网上最大的网站使用文件系统,而不是用于图像存储的数据库。最佳实践。 (这已经在stackoverflow上得到了很多回答)
  • 所以我不太确定双重输入的作用以及它将如何影响代码。另外,如果我想在不同的页面上显示它们,我会怎么做。再次感谢。 @MattPavelle
  • 嗨@user2433384 - 所以有两个输入只是说明如何一次上传两个图像的非常基本方式。本质上,您的 HTML 表单将有两个位置来选择要上传的文件。然后,当您保存到数据库时,您将保存两者(最好检查每个都有一个值)等。如果您想在不同的页面上显示每个,您可能希望使用逻辑来决定哪个图片显示在哪个页面上,但这远离了一个简单的问题,而更多的是“请为我构建这个”领域:)
猜你喜欢
  • 2011-04-23
  • 1970-01-01
  • 2018-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-05
  • 2022-01-24
  • 2021-10-30
相关资源
最近更新 更多