469,568 Members | 1,676 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,568 developers. It's quick & easy.

Viewing images stored in a database

Ok, I've written this script which is supposed to take an image
uploaded by a user and put it in to a database, then at a later date
be able to extract the image from the database and display the image
to the user.

The problem is that whenever I try to display the image, all I get is
an error message that the image contains errors. Can anyone tell me
where or why these errors might be coming up? Here is my script (I'm
pretty sure it's all there):
<?
include("header.inc");
if (!isset($_SESSION['username']) or ($_SESSION['username'] ==
"Guest")) {
header ("Location: ../index.php");
}
dbconnect();

if($id) {

$query = "select mimetype, data from files where id = $id";
$result = mysql_query($query);

$data = mysql_result($result,0,"data");
$type = mysql_result($result,0,"mimetype");

Header( "Content-type: $type");

$size = 150; // new image width
$src = imagecreatefromstring($data);
$width = imagesx($src);
$height = imagesy($src);
$aspect_ratio = $height/$width;

if ($width <= $size) {
$new_w = $width;
$new_h = $height;
} else {
$new_w = $size;
$new_h = abs($new_w * $aspect_ratio);
}

$img = imagecreatetruecolor($new_w,$new_h);
imagecopyresized($img,$src,0,0,0,0,$new_w,$new_h,$ width,$height);

// determine image type and send it to the client
if ($type == "image/pjpeg") {
imagejpeg($img);
} else if ($type == "image/jpeg") {
imagejpeg($img);
} else if ($type == "image/x-png") {
imagepng($img);
} else if ($type == "image/gif") {
imagegif($img);
}
imagedestroy($img);

}

if (isset($_POST['submit'])) {
if (isset($blob_name)) {

if(!$blob_id = upload($blob, $blob_type, $blob_name,
NULL, $_SESSION['username'])) {
echo "Error uploading file";
} else {
echo "File uploaded";
}
}
}

echo"
<form method=POST action=$PHP_SELF
enctype=multipart/form-data>
<p>File to upload:<br>
<input type=file name=blob>
<input type='submit' name='submit' value='Upload'>
</form>
";
echo "<p></p>";
if ($data = getInfo()) {

echo '<table border="0" align="center">
<tr bgcolor="#bad1d1">
<td>File Name</td>
<td><center>File Size</center></td>
<td><center>Mime Type</center></td>
<td><center>Checksum</center></td>
<td><center>Extension</center></td>
<td><center>Uploader</center></td>
<td><center>Date</center></td>
<td><center>Option</center></td>
</tr>
';
for ($i=0; $i<count($data); $i++) {
echo '
<tr bgcolor=#CCCCCC>
<td><a
href="index.php?id='.$data[$i]["id"].'">'.$data[$i]["file_name"].'</a></td>
<td>'.$data[$i]["file_size"].'</td>
<td>'.$data[$i]["mimetype"].'</td>
<td>'.$data[$i]["checksum"].'</td>
<td>'.$data[$i]["extension"].'</td>
<td>'.$data[$i]["uploader"].'</td>
<td>'.$data[$i]["date"].'</td>';
if ($_SESSION["username"] == $data[$i]["uploader"] ||
$_SESSION["level"] == "admin") {
echo '<td><a
href="index.php?id='.$data[$i]["id"].'">Delete</a></td>';}
echo '</tr>
';
}
echo '</table>';
echo '<br>';
echo 'Number of files: ';
echo blobcount();
echo '<br>';
}
?>
<?
function upload($blob, $blob_type, $blob_name, $blob_id = 0,
$uploader) {
if ($blob_id < 1) {
return add($blob, $blob_type, $blob_name, $uploader);
} else {
return update($blob_id, $blob, $blob_type, $blob_name,
$uploader);
}
}

function add($blob, $blob_type, $blob_name, $uploader) {
if ($blob_id = dbinsert("INSERT INTO files (id, file_name,
data, file_size, mimetype, extension, checksum, uploader, date) VALUES
('', '".$blob_name."', '".prepareFile($blob)."',
'".filesize($blob)."', '".$blob_type."',
'".getExtension($blob_name)."', '".generate_sfv_checksum($blob)."',
'".$uploader."', NOW())")) {
return $blob_id;
} else {
echo 'Error adding file';
return false;
}
}

function generate_sfv_checksum($blob) {
$sfv_checksum =
strtoupper(dechex(crc32(file_get_contents($blob))) );
return $sfv_checksum;
}

function getExtension($filename) {
return ereg( ".([^\.]+)$", $filename, $r ) ? $r[1] : "";
}

function prepareFile($blob) {
$blob = addslashes(fread(fopen($blob, "rb"),
filesize($blob)));
$blob = base64_encode($blob);
return $blob;
}

function getInfo($ID = false) {
if ($ID) {
return dbselect("SELECT id, mimetype, extension,
file_size, checksum, file_name, uploader, date FROM files WHERE id =
'".$ID."'");
} else {
return dbselect("SELECT id, mimetype, extension,
file_size, checksum, file_name, uploader, date FROM files");
}
}
?>

--Plex
Jul 17 '05 #1
2 1878
On Sat, 21 Aug 2004 02:37:59 -0700, Plex <in*****@thisisfake.com> wrote:
Ok, I've written this script which is supposed to take an image
uploaded by a user and put it in to a database, then at a later date
be able to extract the image from the database and display the image
to the user.

The problem is that whenever I try to display the image, all I get is
an error message that the image contains errors. Can anyone tell me
where or why these errors might be coming up? Here is my script (I'm
pretty sure it's all there):
if($id) {

$query = "select mimetype, data from files where id = $id";
$result = mysql_query($query);

$data = mysql_result($result,0,"data");
$type = mysql_result($result,0,"mimetype");

Header( "Content-type: $type");

$size = 150; // new image width
$src = imagecreatefromstring($data);
[snip]
function prepareFile($blob) {
$blob = addslashes(fread(fopen($blob, "rb"),
filesize($blob)));
$blob = base64_encode($blob);
As far as I can see, if you remove this line then the rest looks OK. For some
reason you're trying to use base64 encoded data as if it were the original raw
data; if you're uploading into a BLOB field you don't need this step.
return $blob;
}


--
Andy Hassall / <an**@andyh.co.uk> / <http://www.andyh.co.uk>
<http://www.andyhsoftware.co.uk/space> Space: disk usage analysis tool
Jul 17 '05 #2
On Sat, 21 Aug 2004 11:43:50 +0100, Andy Hassall <an**@andyh.co.uk>
wrote:
On Sat, 21 Aug 2004 02:37:59 -0700, Plex <in*****@thisisfake.com> wrote:
Ok, I've written this script which is supposed to take an image
uploaded by a user and put it in to a database, then at a later date
be able to extract the image from the database and display the image
to the user.

The problem is that whenever I try to display the image, all I get is
an error message that the image contains errors. Can anyone tell me
where or why these errors might be coming up? Here is my script (I'm
pretty sure it's all there):
if($id) {

$query = "select mimetype, data from files where id = $id";
$result = mysql_query($query);

$data = mysql_result($result,0,"data");
$type = mysql_result($result,0,"mimetype");

Header( "Content-type: $type");

$size = 150; // new image width
$src = imagecreatefromstring($data);

[snip]
function prepareFile($blob) {
$blob = addslashes(fread(fopen($blob, "rb"),
filesize($blob)));
$blob = base64_encode($blob);


As far as I can see, if you remove this line then the rest looks OK. For some
reason you're trying to use base64 encoded data as if it were the original raw
data; if you're uploading into a BLOB field you don't need this step.
return $blob;
}


I took out that line (I think it's a remnant from when I was trying
something else to get it to work), and uploaded another picture. This
time I also put in a couple lines to output the data receive from the
database into a file, so I could check if the data was somehow getting
corrupted.

Taking out that encode line, the file output worked (images uploaded
with it didn't). However, even thought the file output worked, I am
still getting the error message about the file containing errors, so I
think the problem may be somewhere in processing and outputting the
data, but I don't know enough about the image functions to know where
the problem might be (or if they're even the problem).

--Plex
Jul 17 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

3 posts views Thread by Srdjan Pejic | last post: by
reply views Thread by Paul | last post: by
9 posts views Thread by charliewest | last post: by
10 posts views Thread by Neo Geshel | last post: by
10 posts views Thread by NH | last post: by
7 posts views Thread by Keith Hughitt | last post: by
reply views Thread by suresh191 | last post: by
4 posts views Thread by guiromero | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.