I have used MySQL to save a image as a blob type. I 'm uploading files through PHP and when I get the image back I revive only a part of it. How can I improve the max size ? (my image file size is less than 300 KB)
PHP uploader...
if($_FILES!=null && $_POST!=null){
$file = $_FILES["image"]["tmp_name"];
if(!isset($file)){
echo "Please upload an image";
}else{
$image = addslashes(file_get_contents($_FILES['image']['tmp_name']));
$image_name = addslashes($_FILES['image']['name']);
$type=$_POST['type'];
$image_size = getimagesize($_FILES['image']['tmp_name']);
if($image_size==FALSE)
echo "That's not an image.";
else
{
if(!(mysql_query("INSERT INTO store (name,image,type) values ('$image_name','$image','$type')")))
echo "Problem uploading image";
else
{
$lastid = mysql_insert_id();
echo "Image uploaded. <p /> Your image: <p /> <img id='imageId' src=get.php?id=$lastid>";
}
}
}
}
retrieving image
$id = addslashes($_REQUEST['id']) ;
$imageRow = mysql_query("SELECT * FROM store WHERE id=$id");
$image = mysql_fetch_assoc($imageRow);
$image = $image['image'];
header("Content-type: image/jpg");
echo $image;
You can use different types of blobs. Blob, Mediumblob, longblob, etc.
http://dev.mysql.com/doc/refman/5.0/en/blob.html
Use mysql_real_escape_string() to escape the image data, instead of addslashes(). addslashes() isn't meant for binary.
Use image like this:
<img src='file_display.php?id=<?php echo $row['id']; ?>' width='100' height='100'>
Here, $row['id'] is record primary key - id
and in file_display.php:
// some basic sanity checks
if(isset($_GET['id']) && is_numeric($_GET['id'])) {
//connect to the db
$link = mysql_connect($host, $username, $password) or die("Could not connect: " . mysql_error());
// select our database
mysql_select_db($database) or die(mysql_error());
// get the image from the db
$sql = "SELECT image FROM tbl_images WHERE id=" .$_GET['id'] . ";";
// the result of the query
$result = mysql_query("$sql") or die("Invalid query: " . mysql_error());
// set the header for the image
header("Content-type: image/jpeg");
echo mysql_result($result, 0);
// close the db link
mysql_close($link);
}
It works for me with WAMP 2.x package
you can use this following code ::
<?php
mysql_connect("localhost","root","") or die(mysql_error());
mysql_select_db("database") or die(mysql_error());
$id = $_GET['id'];
$sql = mysql_query(" SELECT * FROM store WHERE id=$id") or die(mysql_error());
$row = mysql_fetch_array($sql);
header('Content: image/jpeg');
echo $row['image'];
?>
Related
I need to do a web page for a client to upload images to a data base and display them.
I am achieve to upload the images into a database, but I'm having trouble displaying them, but I can't work out why
Here is my code:
<!DOCTYPE html>
<head>
<body>
<form action="form.php" method="post" enctype="multipart/form-data">
File:
<input type="file" name="image" /> <input type="submit" value="Upload" />
</form>
<?php
mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("test" ) or die(mysql_error());
$file = $_FILES['image'] ['tmp_name'];
if (!isset($file)) {
echo "<br>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 == FALSE)
echo "<br><br>Thats not an image. <br><br>";
else{
if (!$insert = mysql_query("INSERT INTO imgup VALUES ('','$imageName','$image')"))
echo "Problem uploading the image.";
else{
$lastId = mysql_insert_id();
echo "Article uploaded.<p /> Your image:<p /> <img src=get.php?id=$lastId>";
}
}
}
?>
</body>
</html>
This is my file who turn the image blob into an image:
<?php
mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("test" ) or die(mysql_error());
$id = addslashes($_REQUEST['id']);
$image = mysql_query("SELECT * FROM blog WHERE id=$id");
$image = mysql_fetch_assoc($image);
$image = $image['image'];
header("Content-type: image/jpeg");
echo $image;
?>
And at the end the image does not display and this is what i get: http://goo.gl/gi1Uuc
And if i go and check my database, the image has ben successfully uploaded...
Depending on the file use inline base64 encoding. This is done with:
echo '<img src="data:image/jpeg;base64,'.base64_encode( $image ).'"/>';
Font: base64_encode
OR
Put the T upperCase (Type), because can giving error in IE. Try printing with the function file_get_contents.
header('Content-Type: image/jpeg');
echo readfile($image);
I wouldn't store any image in a database. You should save it as file, and store the file's name in the database. You can then configure which directory an image gets served from without worrying about the full path to the image, or storing binary data in your db (yuck).
Try changing:
$image = mysql_query("SELECT * FROM blog WHERE id=$id");
to:
$image = mysql_query("SELECT * FROM blog WHERE id = '$id'");
Escaping an image file with addslashes will probably corrupt it, the imagesize test should be sufficient
Code for uploading in the blob :
mysql_connect('localhost','root','');
mysql_select_db("dtbase");
$file = $_FILES['logo']['tmp_name'];
echo $file;
$imgData =addslashes (file_get_contents($_FILES['logo']['tmp_name']));
$sql="insert into tab1(coname,date,volume,num,eissn,jname,info1,info2,section,logo)values('$coname','$date','$volume','$num','$eissn','$jname','$info1','$info2','$section','{$imgData}')";
$rs=mysql_query($sql);
Code for retrieving:
$image = mysql_query("SELECT * FRom tab1 WHERE coname='$coname'");
$im = mysql_fetch_assoc($image);
$img = $im['logo'];
Using $img to show the image:
<img src="$img" />
The image does not appear on the web page.
Try this:
echo '<img src="data:image/jpeg;base64,'.base64_encode($im['logo']).'" alt="photo"><br>';
UPDATE.
I can only display the images inside a query e.g.
if($Result = mysqli_query($Link, $Query)){
while($row = mysqli_fetch_array($Result))
{
$img = $row['path'];
echo '<img src="'.$img.'">';
}
}
I want to display them inside a table but this code doesn't work :
<td class="tcgimagecell" colspan="5"><?php echo '<img src="'.$img.'">'; ?></td>
BELOW ISSUE RESOLVED :
I have images stored in a folder (uploads) and the path is stored in a database table in a field named path. I am trying to display the stored images.
$Link = mysqli_connect($Host, $User, $Password, $Database);
$Query = "SELECT * FROM $images";
if($Result = mysqli_query($Link, $Query)){
while($row = mysqli_fetch_array($Result))
{
$img = "uploads/" . $_FILES["file"]["name"];
echo '<img src="'.$img.'">';
}
}
Your folder permissions for "uploads/" might not be set to public read. Have you checked those already? What is the URL that is output for your image? Have you tried Copying URL and linked directly to it from your browser? If the URL is coming back blank, try $row instead of $_FILES since you are just wanting the path to the file.
This line is wrong: $img = "uploads/" . $_FILES["file"]["name"];.
Replace it with $img = "uploads/" . $row[x]; where x is the number of column where file name is
OR
with $img = "uploads/" . $row['columnname'];. Here you have to replace columnname.
here i am trying to upload the employee profile picture to mysql and then i want to fetch those picture. now i can uploaded the image into mysql db successfully but, when i try to fetch the image that doesn't fetch properly. if you open an image in texteditor na how it will look like? the same thing i got it now.. like this... (QÕf0±Ó%"÷YúEûVÚo¾e9°R}È"!5®?•Ÿ\¯ž›ÃÕîYU0T³¼´œ\aVë%z€ÙBðŒÆnPÈ Qx•eú0´ÁPÁ”·=ó-)Oyá+×½ÄS„ÞšÅS!Y¨;,¾¤ª5HÅÓôÍó3Áº¶j/"5±•RX›ee.&{ +C˜ H CÌai,F+Ô#”?Ì8««IÐO%IW).
my question is how to fetch the image properly? and then is there any other way to do store an image to mysql db. for example save a employee profile pictures to one folder and then store that link to mysql???
index.php code:
<form enctype="multipart/form-data" action="img.php" method="post" name="changer">
<input name="image" accept="image/jpeg" type="file">
<input value="Submit" type="submit">
</form>
<?php
include("config.php");
$query = mysql_query("SELECT * FROM tbl_images");
while($row = mysql_fetch_array($query))
{
echo "" . $row['image'] . "";
}
?>
img.php code:
<?
include("config.php");
if (isset($_FILES['image']) && $_FILES['image']['size'] > 0) {
$tmpName = $_FILES['image']['tmp_name'];
$fp = fopen($tmpName, 'r');
$data = fread($fp, filesize($tmpName));
$data = addslashes($data);
fclose($fp);
$query = "INSERT INTO tbl_images ";
$query .= "(image) VALUES ('$data')";
$results = mysql_query($query, $link) or die(mysql_error());
print "Thank you, your file has been uploaded.";
}
else {
print "No image selected/uploaded";
}
?>
Can you try this,
echo '<img src="data:image/png;base64,' . base64_encode($row['image']) . '" />';
Your code:
while($row = mysql_fetch_array($query))
{
echo '<img src="data:image/png;base64,' . base64_encode($row['image']) . '" />';
}
please check the column size where you are saving the file content. The probable reason to me that you are not able to retrieve the images could be that the data is being trimmed due to size limit of the column. Try increasing the size of the column and changing the data type also, if needed. You may try the longblob datatype.
Encapsulate the echo statement in <img> tags
<form enctype="multipart/form-data" action="img.php" method="post" name="changer">
<input name="image" accept="image/jpeg" type="file">
<input value="Submit" type="submit">
</form>
<?php
include("config.php");
$query = mysql_query("SELECT * FROM tbl_images");
while($row = mysql_fetch_array($query))
{
echo "<img src=". $row['image'] . "/>"; // Do like this
}
?>
You need to have it rendered in the HTML as an img tag.
You should consider storing the image in a directory on the server and storing the image name/location in the database. Then create an img tag from that.
you must store you image in a folder and rename the file unique name along with the extension.
and store filename in mysql database table. i think the given code will help you.
<?
include("config.php");
if (isset($_FILES['image']) && $_FILES['image']['size'] > 0) {
$tmpName = $_FILES['image']['tmp_name'];
$filename = $_FILES['image']['name'];
$ext = getExtension($filename);
$new_file = "uniquename_of_file.".$ext; // you can generate unique name by any way you want.
move_uploaded_file($_FILES['image']['tmp_name'],$DESTINATION_FOLDER."/".$new_file; // upload file to the destination folder with new name
$query = "INSERT INTO tbl_images ";
$query .= "(image) VALUES ('$new_file')";
$results = mysql_query($query, $link) or die(mysql_error()); // insert new name into the database
print "Thank you, your file has been uploaded.";
}
else {
print "No image selected/uploaded";
}
?>
function of getting extension will be as follows
function getExtension($str) {
$i = strrpos($str,".");
if (!$i) { return ""; }
$l = strlen($str) - $i;
$ext = substr($str,$i+1,$l);
return $ext;
}
Hey I am facing a problem in displaying images in php. The images are being stored in a table 'images' in mysql. There is another table 'restaurant' which needs to fetch those images and display respective images according to the restid. However, it is facing a problem in fetching the images and not displaying them. Please help!
This is imageupload.php:
<?php
require 'connect.inc.php';
?>
<html>
<head>
<title>Uploading image</title>
</head>
<body>
<?php
echo "<form action='imageupload.php' method='POST' enctype='multipart/form-data'>
Upload: <input type='file' name='image'><input type='submit' value='Upload' >
</form>";
if(isset($_FILES['image']['tmp_name']))
{
$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
{
$query = "INSERT INTO images VALUES ('','$image_name','$image','22')";
$result = mysqli_query($con, $query);
if(!$result)
{
echo "Problem uploading";
}
else
{
echo "Image uploaded ";
$query2 = "SELECT * FROM images WHERE restid = '22'";
$result2 = mysqli_query($con,$query2);
while($info = mysqli_fetch_array($result2))
{
header("Content-type: image/jpeg");
echo $info['image'];
}
}
}
}
else
{
"Please upload a file";
}
?>
</body></html>
This is getimage.php (It fetches the image and displays it):
<?php
require 'connect.inc.php';
$id = $_REQUEST['id'];
$image = "SELECT * FROM images WHERE imgid = $id" ;
$image = mysqli_query($con, $image);
$image = mysqli_fetch_assoc($image);
$image = $image['image'];
header("Content-type: image/jpeg");
echo $image;
?>
connect.inc.php is a file to connect to the database. I referred to other links but did not get any solid help. Please provide help.
Storing image in mysql should work.
Check that you don`t have any syntax errors.
Temporary remove Content-type header to see that image file gets printed (as gibberish string). Also check that mysql field you store image is BLOB type.
Post if you have any error there.