Paul
Paul

Reputation: 1

Unable to display uploaded images via PHP into MySQL

I've trimmed my code down to the bare minimum to try to find why I cannot display any image that I upload & store via PHP into MySQL. If anyone can point out my error(s) I'd be most grateful.

On execution, the browser reports that the image cannot be displayed as it contains errors.

However, the image uploads & displays fine in other databases running in this same environment.

I've checked that the database holds a blob after upload.

I guess I'm missing something obvious.

Upload form..

<body>
<form enctype="multipart/form-data" action="imagetestprocess.php" method="post">
<input type="file" name="image">
<input type="submit" value="Submit">
</form>

Form handler..

<?php
include("../mylibrary/login.php");

login();

$imagefile = file_get_contents($_FILES['image']['tmp_name']);
$imagefile = mysql_real_escape_string($imagefile);
$query="UPDATE pieces SET image_full='$imagefile' WHERE assetno='1'";
$result = mysql_query($query);

?>

Image displayer..

<?php
include("../mylibrary/login.php");

login();
echo "<body>";
echo "before";
echo "<img src=\"showimage.php\" alt=\"showimage\">";
echo "after";

?>

called function...

<?php
include("../mylibrary/login.php");
login();
$query = "select * from pieces where assetno='1'";
$result=mysql_query($query);
$row=mysql_fetch_array($result, MYSQL_ASSOC);
$image=$row['image_full'];
header("Content-type: image/jpeg"); 
echo $image;
?>

Upvotes: 0

Views: 684

Answers (4)

iWantSimpleLife
iWantSimpleLife

Reputation: 1954

I think it has something to do with your database encoding. some encoding does not support binary data.

If you cannot change the encoding, maybe you css base64 encode the data before saving and decode it when displaying. only thing is base64 will increase the size by 3.

Upvotes: 0

er.miteshp
er.miteshp

Reputation: 75

change the image_full field type to MEDIUMBLOB / BLOB

user this $image = chunk_split(base64_encode(file_get_contents("image.jpg"))); instead of $imagefile = file_get_contents($_FILES['image']['tmp_name']);

and in show image function use image as below.

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

Upvotes: 1

rajesh
rajesh

Reputation: 2523

If the above solutions does not work for you. Try increasing the length of the field in database. if still it does not work, You can check if the image format is RGB or CMYK. format shoud be RGB to see on screen. To make it sure you can try opening the same image file in browser.

Upvotes: 0

Jaspreet Chahal
Jaspreet Chahal

Reputation: 2750

use mysql_escape_string or addslashes and clear your browser cache to see if it works

Upvotes: 0

Related Questions