inserting image and thumbnail into DB
I am building a simple cms system for a site that is archiving books.I wish to allow the owner to upload an image title description etc into a DB. I have a simple script working which was taken from sitepoint -DB driven website chapter 10- filestore.php. However i need to either create a thumbnail on the fly or create one before hand and upload it with the main image. I don't know how to integrate this into the script i have already. Any help appreciated!
thanx guys but still confused
Had a look at GD library but got bogged down and spent hours achieving nothing.
Here is the code i am using. This will insert an image description etc in to 'filestore'. I am pulling everything back out but want to either generate thumbs to display in the DB or generate thumbs on the fly for display.
I looked at hundreds of tutorials which all deal with images that are in an 'image' folder , however mine are stored as 'medium blobs' in a DB
<?php
$dbcnx = @mysql_connect('localhost', 'root', 'password');
if (!$dbcnx) {
exit('<p>Unable to connect to the ' .
'database server at this time.</p>');
}
if (!@mysql_select_db('diseart')) {
exit('<p>Unable to locate the diseart ' .
'database at this time.</p>');
}
if (isset($_GET['action'])) {
$action = $_GET['action'];
} else {
$action = '';
}
if (($action == 'view' or $action == 'dnld') and isset($_GET['id'])) {
$id = $_GET['id'];
// User is retrieving a file
$sql = "SELECT filename, mimetype, filedata
FROM filestore WHERE id = '$id'";
$result = @mysql_query($sql);
if (!$result) {
exit('Database error: ' . mysql_error());
}
$file = mysql_fetch_array($result);
if (!$file) {
exit('File with given ID not found in database!');
}
$filename = $file['filename'];
$mimetype = $file['mimetype'];
$filedata = $file['filedata'];
$disposition = 'inline';
if ($action == 'dnld') {
$disposition = 'attachment';
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 5') or
strpos($_SERVER['HTTP_USER_AGENT'], 'Opera 7')) {
$mimetype = 'application/x-download';
}
}
header("content-disposition: $disposition; filename=$filename");
header("content-type: $mimetype");
header('content-length: ' . strlen($filedata));
echo($filedata);
exit();
} elseif ($action == 'del' and isset($_GET['id'])) {
$id = $_GET['id'];
// User is deleting a file
$sql = "DELETE FROM filestore WHERE id = '$id'";
$ok = @mysql_query($sql);
if (!$ok) {
exit('Database error: ' . mysql_error());
}
header('location: ' . $_SERVER['PHP_SELF']);
exit();
} elseif (isset($_FILES['upload'])) {
// Bail out if the file isn’t really an upload.
if (!is_uploaded_file($_FILES['upload']['tmp_name'])) {
exit('There was no file uploaded!');
}
$uploadfile = $_FILES['upload']['tmp_name'];
$uploadname = $_FILES['upload']['name'];
$uploadtype = $_FILES['upload']['type'];
$uploaddesc = $_POST['desc'];
// Open file for binary reading ('rb')
$tempfile = fopen($uploadfile, 'rb');
// Read the entire file into memory using PHP's
// filesize function to get the file size.
$filedata = fread($tempfile, filesize($uploadfile));
// Prepare for database insert by adding backslashes
// before special characters.
$filedata = addslashes($filedata);
$thumbdata = create_thumb($filedata);
// Create the SQL query.
$sql = "INSERT INTO filestore SET
filename = '$uploadname',
mimetype = '$uploadtype',
description = '$uploaddesc',
filedata = '$filedata',
thumbdata = '$thumbdata'";
// Perform the insert.
$ok = @mysql_query($sql);
if (!$ok) {
exit('Database error storing file: ' . mysql_error());
}
header('location: ' . $_SERVER['PHP_SELF']);
exit();
}
// Default page view: lists stored files
$sql = 'SELECT id, filename, mimetype, description FROM filestore';
$filelist = @mysql_query($sql);
if (!$filelist) {
exit('Database error: ' . mysql_error());
}
?>
<?
function create_thumb($filename){
//Resize the following jpg image
//$filename='/pathtoyourimage.jpg';
$array = getimagesize($filename);
$width_orig= $array[0];
$height_orig= $array[1];
//We resize to a max size of 640 either on the width size or height size
if($width_orig > $height_orig)
$ratio= $width_orig/640;
else $ratio=$height_orig/640;
$width=$width_orig/$ratio;
$height=$height_orig/$ratio;
$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
//Output into another file - 50 is a pecentage of the original quality
imagejpeg($image_p,'resized-'.$filename, 50);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>PHP/MySQL File Repository</title>
<meta http-equiv="content-type"
content="text/html; charset=iso-8859-1" />
</head>
<body>
<h1>PHP/MySQL File Repository</h1>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>"
method="post" enctype="multipart/form-data">
<p><label>Upload File:<br />
<input type="file" name="upload" /></label></p>
<p><label>File Description:<br />
<input type="text" name="desc" maxlength="255" /></label></p>
<p><input type="submit" value="Upload" /></p>
</form>
<p>The following files are stored in the database:</p>
<table>
<tr>
<th>Filename</th>
<th>Type</th>
<th>Description</th>
</tr>
<?php
if (mysql_num_rows($filelist) > 0) {
while ($f = mysql_fetch_array($filelist)) {
?>
<tr valign="top">
<td>
<a href="<?php echo $_SERVER['PHP_SELF']; ?>?action=view&id=<?php echo $f['id']; ?>">
<?php echo $f['filename']; ?></a>
<!-- would like to output an image here preferably generated-->
</td>
<td><?php echo $f['mimetype']; ?></td>
<td><?php echo $f['description']; ?></td>
<td>
[<a href="<?php echo $_SERVER['PHP_SELF']; ?>?action=dnld&id=<?php echo $f['id']; ?>"
>Download</a> |
<a href="<?php echo $_SERVER['PHP_SELF']; ?>?action=del&id=<?php echo $f['id']; ?>"
onclick="return confirm('Delete this file?');"
>Delete</a>]
</td>
</tr>
<?php
}
} else {
?>
<tr><td colspan="3">No Files!</td></tr>
<?php
}
?>
</table>
</body>
</html>