2012-11-03 194 views
6

我试图显示上传到MySql的“商店”表中的最后5张图片。 我是一个完全的PHP和数据库noob,我一直在阅读很多关于如何做到这一点,但没有运气。如何显示存储在MySql数据库中的BLOB图像?

我可以一次存储和显示一张照片,但我希望能够有一个排序库以显示最近5次上传的图片。

任何意见或帮助将不胜感激谢谢!

p.s.我知道它不喜欢把图片存储到这样的数据库,但这个项目只是为了练习。

的index.php

<!DOCTYPE html> 
<html> 
<head> 
<title>Project One</title> 
</head> 

<body> 

<form action="index.php" method="POST" enctype="multipart/form-data"> 
    File: 
    <input type="file" name="image"> <input type="submit" value="Upload"> 
<form> 
<p /> 

<?php 

//connect to database 
(connect to server) 
(select correct DB) 

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

if (!isset($file)) 
    echo "please select an image."; 
else 
    { 
    $image = addslashes(file_get_contents($_FILES['image']['tmp_name'])); 
    $image_name = $_FILES['image']['name']; 
    $image_size = getimagesize($_FILES['image']['tmp_name']); 

    if($image_size==FALSE) 
    echo "That's not an image."; 
    else 
    { 
    if (!$insert = mysql_query("INSERT INTO store VALUES ('', '$image_name', '$image')")) 
     echo "Problem Uploading Image."; 
    else 
     { 

     $lastid = mysql_insert_id(); 
     echo "Image uploaded. <p />Your image:<p /><img src=get.php?id=$lastid>"; 

     } 
    } 
    } 

?> 

<p /> 
<p /> 
<a href="http://WEBSITE.com/gallery.php"> Go to Gallery </a> 
</body> 

</html> 

get.php

<?php 

    //connect to database 
    (connect to server) 
    (select correct DB) 

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

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

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

echo $image; 

?> 
+0

检查这: http://stackoverflow.com/questions/118144/whats-the-most-efficient-way-to-select-the-last-n-rows-in-a-table-without-chang – Vucko

回答

6

这是我用来当我想要做这样的事情......很久以前! = P

$sql = "SELECT image FROM table WHERE cond ORDER BY xxxx DESC LIMIT 5"; 
$result = mysqli_query($db,$sql); 
while($arraySomething = mysqli_fetch_array($result)) 
{ 
    echo "<img src='php/imgView.php?imgId=".$arraySomething."' />"; 
} 
+0

是否还有更多那比呢?我试图添加它,并打印出一张破碎的图像......我应该如何创建一个循环来打印每行从最大值开始倒数的图片? 为1..5循环 “与max_id打印图像”,然后从max_id 递减... 东西沿着 – Ktmock13

+0

我的例子不是直接复制/粘贴这些行我只是向您展示如何添加一个。你可以做的是基本上为你的查询添加一个5的限制,并命令它显示最后5个。然后执行如下操作: $ sql =“SELECT * FROM table WHERE cond LIMIT 5”; $ result = mysqli_query($ db,$ sql); while($ arraySomething = mysqli_fetch_array($ result)) { // echo img here } – Manatax

5

我尝试使用header('content-type: image/jpeg');的第一种方法,但最终得到的图像未显示。通过网站的几个谷歌后,我发现我可以从数据库显示的图像到我的网页

解决试试这个:

mysql_connect("localhost","root","")or die("Cannot connect to database"); //keep your db name 
mysql_select_db("example_db") or die("Cannot select database"); 
$sql = "SELECT * FROM `article` where `id` = 56"; // manipulate id ok 
$sth = mysql_query($sql); 
$result=mysql_fetch_array($sth); 
// this is code to display 
echo '<img src="data:image/jpeg;base64,'.base64_encode($result['image_file']).'"/>' 
+0

警告mysql_query已在PHP 5.5.0中弃用,并且已在PHP 7.0.0中删除。相反,应该使用MySQLi或PDO_MySQL扩展。 – Manatax

1
mysql_connect("localhost","root","")or die("Cannot connect to database"); 

//keep your db name 
mysql_select_db("example_db") or die("Cannot select database"); 

$sql = "SELECT * FROM `article` where `id` = 56"; 
// manipulate id ok 
$sth = mysql_query($sql); 
$result=mysql_fetch_array($sth); 
// this is code to display 

echo '<img src="data:image/jpeg;base64,'.base64_encode($result['image_file']).'"/> width="xxxx" height="xxxx"'; 

添加的高度和宽度也

+0

警告mysql_query在PHP 5.5.0中已弃用,并且已在PHP 7.0.0中删除。相反,应该使用MySQLi或PDO_MySQL扩展。 – Manatax

相关问题