Jump to content

Outputting an Image From DB


Bopo

Recommended Posts

Hey

 

Well I have written a little script to pull an image from a DB for me (yeah I know its bad practice to store images as blobs in db's, but it will only ever be 1 image)

 

Anyway my problem is I'm using sessions, and to display the image I use a header, obviously headers have to appear at the top of a page, but so does my session and I want to display this image within the middle of static content on my page, using an include statement, here's what I have

 

<?php

include ("blogconnect.php");


$sql = "SELECT * FROM userimage";
$query = mysql_query($sql, $connect) or die(mysql_error());

if(mysql_num_rows($query)== 1) {	
$row = mysql_fetch_assoc($query);
$userimage = $row['image'];

header('Content-type: image/jpeg');
echo $userimage;


} else {
   echo '<p><img src="../images/profile_blank_gray.jpg" width="75" height="75" alt="annyomous image" /> Upload an image</p>';
      
}


?>

 

To be honest I'm looking for a method that doesn't need to output the image using a header.

Link to comment
https://forums.phpfreaks.com/topic/152025-outputting-an-image-from-db/
Share on other sites

I think you are confusing the difference of including an image on a page (i.e. using the IMG tags) versus handing the image to the browser as an image. The code you have will either "serve" the image to the browser as a file or try to insert an image tag intothe HTML page - two entirely different things.

 

In the page that you want to "display" the image, do somethign like this:

<p>Here is some text that comes before the image</p>
<br />
<img src="getuserimage.php">
<br />
<p>Some text that comes after the image</p>

 

Then create the page "getuserimage.php" so it will serve the image to the browser.

<?php

include ("blogconnect.php");

$sql = "SELECT * FROM userimage";
$query = mysql_query($sql, $connect) or die(mysql_error());

if(mysql_num_rows($query)== 1) {	
   $row = mysql_fetch_assoc($query);
   $img_content = $row['image'];
} else {
   $img_content = readfile("../images/profile_blank_gray.jpg");
}

header('Content-type: image/jpeg');
echo $img_content;

?>

 

However, I see absolutely no reason to use a database to store only ONE image!? If you are trying to "protect" the image from hot-linking there are much better ways of doing that. And, the method you have does not protect the image from being copied if that is what you are after.

Hi

 

Many thanks for the reply, I can understand why it's illogical to store just 1 image in a table, however after trying various pieces of code, I copied your example exactly, sadly no image is displayed, and the img tag remains the same, I'm quite certain that everything is fine with the image in the database, so I'm unsure what to try next.

Well, I've tested it and it works for me. I inserted a file into the database using a mediumblob type. Then I had two pages: one for the HTML page that would display the content (including the image tag) and a second page that would be used as the SRC for the image tag.

 

content page

<html>
<body>
Image:<br /> 
<img src="userimage.php">
</body>
</html>

 

Image Page (i.e. userimage.php)

<?php

// Connect to DB
$dbh = mysql_connect('localhost', 'root', '');
mysql_select_db('testDB');

$query = "SELECT `image` FROM `userimage`";
$result = mysql_query($query) or die(mysql_error());

if(mysql_num_rows($result) == 1) {	
   $record = mysql_fetch_assoc($query);
   $img_content = $record['image'];
} else {
   $img_content = readfile('profile_blank_gray.jpg');
}

header('Content-type: image/jpeg');
echo $img_content;

?>

 

The problem may be in how you are saving/storing the image in the database. Take a look at this tutorial: http://www.php-mysql-tutorial.com/wikis/mysql-tutorials/uploading-files-to-mysql-database.aspx

 

I can understand why it's illogical to store just 1 image in a table

 

Then why do it. What is your reasoning for wanting to make something simple into something complex?

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.