Getting an image from a database using PHP - php

first time using stack overflow.
I have followed the following 2 part youtube tutorial on uploading/storing an image in a MYSQL database. I have followed the instructions but my image is not appearing for me. I use connect.php to connect to the database, this appears to be working fine. It seems the problem is with get.php as when I test echoing any images from it I always get no image.
used phpmyadmin to create the database and am using xampp.
here is the link to the youtube tutorials
http://www.youtube.com/watch?v=CxY3FR9doHI
http://www.youtube.com/watch?v=vFZfJZ_WNC4&feature=fvwrel
Included are the files
<html>
<head>
<title>Upload an image</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>
<?php
include 'connect.php';
//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=addslashes($_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>";
}
}
}
?>
</body>
</html>
Here is get.php
<?php
include 'connect.php';
$id=stripslashes($_REQUEST('id'));
$image = mysql_query("SELECT * FROM store WHERE id=$id");
$image = mysql_fetch_assoc($image);
$image=$image('image');
header("content-type: image/jpeg");
?>
And finally connect
<?php
// connect to database
$db_host="localhost";
$db_username="root";
$db_pass="";
$db_name="test";
#mysql_connect("$db_host","$db_username","$db_pass") or die("Could not connect to mysql");
mysql_select_db("$db_name")or die("Cant find database");
?>

Your get.php doesn't echo $image.
Also $image=$image('image'); should be $image=$image['image'];, and $_REQUEST('id') should be $_REQUEST['id'].
P.S. Don't use addslashes to prevent against SQL injections. Use mysql_real_escape_string.

You never echo the image data in get.php, so you're serving a blank 0-byte image.

You are missing a line after the header output
header("content-type: image/jpeg");
echo $image;

Very quick glance, in get.php change:
$image=$image('image');
to
$image=$image['image'];
mysql_fetch_assoc() converts the results into an array.

You better of bas64_encoding an decoding that way none ansi chars wont create a problem.
base64_encode(file_get_contents($_FILES['image']['tmp_name']));
This is wrong as array is [] not ()
include 'connect.php';
$id=stripslashes($_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 base64_decode($image);

Piece of code I use in a site of mine:
<?php
ob_start();
require_once("db.php.lib");
DBLogin();
$sql = "select pic_user_id, pic_full_data as bindata, pic_full_mime as mime, pic_full_size as size from pics where pic_name = '".urldecode($_GET["pic_name"])."'";
$result = DBExec($sql);
if ($result)
{
$row = DBGetNextRow($result);
if ($row)
{
header("Content-type: ".$row["mime"]);
header("Content-length: ".$row["size"]);
ob_clean();
echo $row["bindata"];
ob_end_flush();
}
}
?>
It looks like you're leaving out the actual output of the image data, and the length might be required by some browsers...

Related

Retrieve image long raw datatype stored in oracle database in php

I tried to display image stored in oracle database
I get it as decode data
I tried to this code but not work
first way
$img= studimage::select('studimage')->where('studnum',$id)->first();
header("Content-type: image/jpeg");
echo ($img->studimage) ;
sec-way
echo '<img src="data:image/jpg;base64,'. base64_encode($img->studimage). '" />';
the two ways does not work :(
I'm using this same functionality in one of my project, please check my code below
you can either make a page that will render the image
<img src="image.php?id=123" />
That image.php page would have this:
$sql = "SELECT image FROM images WHERE image_id = " . (int) $_GET['id'];
$stid = oci_parse($conn, $sql);
oci_execute($stid);
$row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS);
if (!$row) {
header('Status: 404 Not Found');
} else {
$img = $row['IMAGE']->load();
header("Content-type: image/jpeg");
print $img;
}
Or, you could base64 encode it into the src (note, not all browsers handle this well):
<img src="data:image/jpeg;base64,<?php echo base64_encode($img); ?>" />

Uploading image into MySQL from PHP script

As title I am trying to upload images on a DB Mysql using PHP:
Here are the scripts: (I know I should use mysqli...)
form in HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="generator" content="AlterVista - Editor HTML"/>
<title> Carica un'immagine </title>
</head>
<body>
<form enctype="multipart/form-data" action="upload.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="3000000">
Invia questo elemento: <input name="userfile" type="file"></br>
<input type="submit" value="Carica">
</form>
</body>
</html>
PHP script:
<?php
//Connect to DB
$conn = mysql_connect('localhost', 'realegr', 'pass', 'my_realegr');
if (!$conn){
die("Could Not Connect to MySQL!");
}
if(!mysql_select_db("my_realegr")){
die("Could Not Open Database:" . mysql_error());
}
//file properties
$file = $_FILES['userfile']['tmp_name'];
if (!isset($file)){
echo "<p>Please Select an Image</p>";
} else {
$image = mysql_real_escape_string(file_get_contents($_FILES['userfile']['tmp_name']));
$image_name = mysql_real_escape_string($_FILES['userfile']['name']);
$image_size = getimagesize($_FILES['userfile']['tmp_name']);
if ($image_size==FALSE) {
echo "<p>NOT AN IMAGE</p>";
} else {
echo "<p>File is an Image. Processing...</p>";
if(!$insert = mysql_query("INSERT INTO images (name, image) VALUES ('$image_name','$image')")){
echo ("<p>Error Uploading Image: " . mysql_error() . "</p>");
} else {
$lastid = mysql_insert_id();
echo "<p>Success!</p>";
echo "<img src=get.php?id=$lastid>";
}
}
}
?>
Obviously there is another php script (get.php),but the problem is in this one.
The error I got is this:
File is an Image. Processing...
Error Uploading Image: Data too long for column 'image' at row 1
I can't understand the reason...(the image is of just 70 kb)
(THis is my table:
id int primary key Auto_increment
name varchar(50)
image blob
)
Don't save image data in the database. There is no need, and could even cause your site to run more slowly!
Instead, save it into an uploads folder that isn't publicly accessible using move_uploaded_file() http://php.net/manual/en/function.move-uploaded-file.php
Once you do that, store the path to the file in the DB!
Currently you have this line:"INSERT INTO images (name, image) VALUES ('$image_name','$image')". What if you attempted to change it into something like:
<?php
// NOTICE THE "LOAD_FILE"
// WHERE $fileToLoad IS THE PATH TO THE UPLOADED IMAGE-FILE
"INSERT INTO images (name, image)
VALUES('$image_name', LOAD_FILE({$fileToLoad}))";
However, storing images in the Database, from experience, is always not the very best of options...consider storing the images in a dedicated folder and simply saving only the address in your Database....

Image from blob object not displayed in a page

This is my HTML code for displaying image stored as blob object which is stored in a database.
<tr><td>photo</td><td><img src="image.php?id=<?php echo $employee['id']; ?>" /></td></tr>
This is the image.php file:
<?php
include db.php;
$employee_id = (isset($_GET['id']) && is_numeric($_GET['id'])) ? intval($_GET['id']) : 0;
try
{
$sql = "SELECT photo
FROM employee where id = $employee_id limit 1";
$s = $pdo->prepare($sql);
$s->execute();
}
catch (PDOException $e)
{
$error = 'Employee not found' . $e->getMessage();
include 'error.html.php';
exit();
}
$employee = $s->fetch();
$image = $employee['photo'];
header('Content-Type: image/jpeg');
echo $image;
?>
When I look at the HTML code in Firebug, I can see
<img src="image.php?id=9">
But no image is displayed in the table row. Do you know how to find out what is wrong?
When I open the page ...image.php?id=9 in Firefox
It shows a message
The image ...image.php?id=9 cannot be
displayed because it contains errors.
It is strange that every image I have contains an error. I inserted only images with
size smaller than the blob object.
do you get an error?
try to use "exit;" after the echo and remove the closing php tag.
it's optional and you don't really need it (http://php.net/manual/en/language.basic-syntax.instruction-separation.php).
header('Content-Type: image/jpeg');
echo $image;
exit;

Displaying an image from an SQL BLOB with PHP

I have two files, one to upload an image and another to retrieve it from the database and present it on the web page. However the image only appears as broken image icon. I do not understand why.
Thanks for any help in advance.
The HTML form:
<form action="index.php" method="POST" enctype="multipart/form-data">
<label for="image">File:</label>
<input type="file" name="image">
<input type="submit" value="Upload">
</form>
The php to upload it(The connection to the DB is left out below but it works perfectly):
//file stuff
$file= $_FILES['image']['tmp_name'];
if(!isset($file))
echo "Please select an image";
else {
$image=addslashes(file_get_contents($_FILES['image']['tmp_name']));
$imageName=addslashes($_FILES['image']['name']);
$imageSize=getimagesize($_FILES['image']['tmp_name']);
if(!$imageSize)
echo "Thats not an image you mong";
else {
//upload
$query="INSERT INTO store VALUES('','$imageName','$image')";
$sendQuery=mysql_query($query);
if(!$sendQuery)
echo "This is embarressing. It didn't work";
else {
$lastid=mysql_insert_id();
echo "Image was uploaded. <br>Your image:";
echo "<img src=get.php?id=$lastid/>";
}
}
}
The PHP to retrieve the image(Again the DB connection is left out below but works perfectly):
$id=addslashes($_REQUEST(['id']));
$imageQuery="SELECT * FROM store WHERE id=$id;";
$sendImageQuery=mysql_query($imageQuery);
$image=mysql_fetch_assoc($sendImageQuery);
$image=$image['image'];
header("Content-type: image/jpeg");
echo $image;
Make sure the the opening php tag is the very first line of the file. If the opening php tag is not on the first line of the file then content has already been written to the response causing calls to the header() function to be ignored.
<?php // this has to be on line 1
// do database connections stuff, no output can be sent to the response.
$id=addslashes($_REQUEST(['id']));
$imageQuery="SELECT * FROM store WHERE id=$id;";
$sendImageQuery=mysql_query($imageQuery);
$image=mysql_fetch_assoc($sendImageQuery);
$image=$image['image'];
header("Content-type: image/jpeg");
echo $image;
?>
Maybe one of the magic quote setting (magic_quotes_gpc), try:
$image=stripslashes($image['image']);
You should be using mysql_real_escape_string() instead of addslashes() and only if magic quotes are not enabled.

image loaded from database does not show

guys.
I tried to load image stored in mysql blob field with php, but the image does not show correctly. In firebug, I got these infos: get-image.php Dimensions0 × 0File size5.35KBMIME typeimage/jpeg
Here is my code
HTML
<html>
<head>
<title>Demo of Database Image in a page</title>
</head>
<body>
Here is your picture:<br>
img src=get-image.php?id=1 width=400 height=300><br>
</body>
</html>
PHP
<?php
include "db.php";
$conn = OpenDbConnection();
$key = $_GET["id"];
$tkey = "" . $key . "";
$strsql = "SELECT * FROM `images` WHERE `image_id` = " . $tkey;
$rs = mysql_query($strsql, $conn) or die(mysql_error());
if (!($row = mysql_fetch_array($rs))) {
die("File not exists.");
}
header("Content-type: image/jpeg");
echo $row["content"];
mysql_free_result($rs);
mysql_close($conn);
?>
Please someone tell me what is wrong with my code?
Please try this code.
Instead of
echo $row["content"];
Use this code
?>
<img scr="<?php echo $row["content"];?>" />
<?php
Thanks,
Kanji
Maybe it's because of blog type. Whenever you upload an image which exceed the limit of blob, then image not displayed correctly. Try to change type from blob to long blob.

Categories