如何显示存储在数据库中的所有图像

Posted

技术标签:

【中文标题】如何显示存储在数据库中的所有图像【英文标题】:How to display all the images stored inside a database 【发布时间】:2012-02-04 05:23:23 【问题描述】:

我正在制作一个使用 mysql 数据库的画廊(是的,我知道这是一种不好的做法,但这是目前的要求。)我可以上传多张图片,但无法显示存储在数据库中的所有图片。 FORM 允许上传五张图片。然后用户必须进入另一个页面,其中将显示数据库中的所有图像(包括最近上传的图像)以及图像的描述。我已经有代码,但是可以在显示器上运行的代码不工作或者我认为是错误的。

表格代码如下:

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

 </head>
 <body> 
 <div align="center">
    <form action="fUpload.php" method="POST" enctype="multipart/form-data">
    All forms must be filled. <br />
    File: <br />
    <input type="file" name="image[]"/> <input type="text" name="imageDescription[]" size="30" /> <br />
    <input type="file" name="image[]"/>  <input type="text" name="imageDescription[]" size="30" /> <br />
    <input type="file" name="image[]"/>  <input type="text" name="imageDescription[]" size="30" /> <br />
    <input type="file" name="image[]"/>  <input type="text" name="imageDescription[]" size="30" /> <br />
    <input type="file" name="image[]"/> <input type="text" name="imageDescription[]" size="30" /> <br />

    <input type="submit" value="Upload image" />

    </form>
</div>  
</body>
</html>

这是要上传的脚本:

 <?php 

//connect to the database//
$con = mysql_connect("localhost","root", "");
if(!$con)

 die('Could not connect to the database:' . mysql_error());
 echo "ERROR IN CONNECTION";


$sel = mysql_select_db("imagedatabase");
if(!$sel)

 die('Could not connect to the database:' . mysql_error());
 echo "ERROR IN CONNECTION";

//file properties//

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

echo '<br />';

 /*if(!isset($file))
    echo "Please select your images";

else

 */for($count = 0; $count < count($_FILES['image']); $count++)

//$image = file_get_contents($_FILES['image']['tmp_name']);
    $image_desc[$count] = addslashes($_POST['imageDescription'][$count]);
    $image_name[$count] = addslashes($_FILES['image]']['name'][$count]); echo '<br \>';
    $image_size[$count] = @getimagesize($_FILES['image']['tmp_name'][$count]);
    $error[$count] = $_FILES['image']['error'][$count];

    if($image_size[$count] === FALSE  || ($image_size[$count]) == 0)
        echo "That's not an image";
    else
    

    // Temporary file name stored on the server
     $tmpName[$count]  = $_FILES['image']['tmp_name'][$count];

  // Read the file
    $fp[$count]   = fopen($tmpName[$count], 'r');
    $data[$count] = fread($fp[$count], filesize($tmpName[$count]));
    $data[$count] = addslashes($data[$count]);
     fclose($fp[$count]);


  // Create the query and insert
  // into our database.

  $results = mysql_query("INSERT INTO images( description, image) VALUES             ('$image_desc[$count]','$data[$count]')", $con);

        if(!$results)
        echo "Problem uploding the image. Please check your database";  
    //else 
    //
        echo "";
        //$last_id = mysql_insert_id();
        //echo "Image Uploaded. <p /> <p /><img src=display.php?    id=$last_id>";
        //header('Lcation: display2.php?id=$last_id');
        
    //



mysql_close($con);
header('Location: fGallery.php');
?>

最后是应该显示的:

<html>
<body>

</body>
<?php

//connect to the database//
mysql_connect("localhost","root", "") or die(mysql_error());
mysql_select_db("imagedatabase") or die(mysql_error());

//requesting image id

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

$image = mysql_query("SELECT * FROM images WHERE id = $id");


while($datum = mysql_fetch_array($image, MYSQL_ASSOC))

        printf("Description %s $image = $image['image'];

header("Content-type: image/jpeg");



mysql_close();


?>

非常感谢您的帮助。我非常需要它继续前进。

【问题讨论】:

好吧,至少您在 printf 中的双引号之前缺少转义...然后您需要调用 $datum['image']... 【参考方案1】:

我从您的帖子中了解到,上传和存储不是问题,但显示图像是。这可能是因为您使用的是未设置的变量,因此在数据库中找不到任何结果。如果我误解了,请告诉我。

<?php
// No ID
$image = mysql_query("SELECT * FROM images ORDER BY id DESC");   
?>

也看看 Prof83 怎么说。如果您的脚本仅适用于一张图片,请忽略我的帖子。

最后但同样重要的是,如果您使用不同的文件类型,还要在标题中回显正确的 MIME 格式。

更新 我结合了两个答案。

编辑你的循环:

<?php
while($row = mysql_fetch_assoc($image))

        echo '<img src="img.php?id='.$row["id"].'">';

?>

创建页面名称img.php

<?php
$query = mysql_query("SELECT image FROM images WHERE id = ".$_GET['id']);
$row = mysql_fetch_assoc($query);
header("Content-type: image/jpeg");
echo $row['image'];
?>

【讨论】:

感谢您的提示。 :D 我会告诉你它是否有效。再次感谢.. :D 我遇到了另一个错误。它说警告:无法修改标头信息 - 标头已由 C 中的(输出开始于 C:\XAMP\xampp\htdocs\gallery\fUpload.php:21)发送:\XAMP\xampp\htdocs\gallery\fUpload.php 在第 70 行并且没有显示出来.. 怎么了? 我在标题方面遇到了另一个问题..它不断出现..警告.. 它已经在显示,但只显示损坏的图像.. :( 还是有问题..我想通了.. 请帮助.. :D Simoncode 没问题!你能赞成我的回答吗?谢谢【参考方案2】:

好的,您不能在一个图像/jpeg 页面中显示多个图像...

您告诉浏览器该页面是图像/jpeg(换句话说,该页面是图像),但您正在回显多个图像数据

您应该使用图库页面来显示所有图像,如下所示:

<?php
// $images = result from database of all image rows
foreach ($images as $img) echo '<img src="img.php?id='.$img["id"].'">';
?>

在img.php中:

// Load the image data for id in $_GET['id'];
header("Content-type: image/jpeg");
echo $data;

【讨论】:

哇!谢谢!我从来没有意识到.. 感谢您提供的信息.. 我应该将 php 代码与 foreach 放在哪里? :D 在你的显示页面里面,显示所有图片的页面... PS。如果这对您有帮助,请将其标记为正确答案:D 我已经修改了答案以帮助理解foreach语句 我可以很直接吗?你能帮我做这个吗?我的意思是你能更正画廊的代码吗?我已经很困惑了..从昨天开始我就一直在做这个..:( 所以我不会使用 while 还是我仍然会使用它?我越来越困惑..啊哈哈抱歉..

以上是关于如何显示存储在数据库中的所有图像的主要内容,如果未能解决你的问题,请参考以下文章

显示存储为 MySQL 数据库中 BLOB 数据的所有图像

如何将存储在数据库中的图像作为字符串显示到真实图像?

如何显示存储在数据库 PHP 中的图像路径? (Laravel 兰花)

考虑到我的图像的链接存储在 MySQL 数据库中,如何通过 php 显示存储在文件夹中的图像

如何显示存储在熊猫数据框中的图像?

如何在反应js中显示来自firebase存储的所有图像