Error in displaying an image in php mysql - php

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.

Related

0 kb when upload and store image to server

I have a table named images. It has two columns id and image (varchar300). I have this code upload.php :
<?php
if($_SERVER['REQUEST_METHOD']=='POST'){
$image = $_POST['image'];
require_once('dbConnect.php');
$sql ="SELECT id FROM images ORDER BY id ASC";
$res = mysqli_query($con,$sql);
$id = 0;
while($row = mysqli_fetch_array($res)){
$id = $row['id'];
}
$path = "uploads/$id.png";
$actualpath = "/home/kinanday/public_html/$path";
$sql = "INSERT INTO images (image) VALUES ('$actualpath')";
if(mysqli_query($con,$sql)){
file_put_contents($path,base64_decode($image));
echo "Successfully Uploaded";
}
mysqli_close($con);
}else{
echo "Error";
}
this is upload.html :
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="image" />
<button>Upload</button>
</form>
</body>
The problem is: it saves into my database but the image in my file manager in Cpanel is 0kb
I am using this code to integration to my android app which need an image with varchar type. So in my app does not show image anything because the image is 0KB.
Can anybody with your advance to fix my php. every answer is very helpful for me. Thanks in advance.
You need to use the $_FILES superglobal, as #Fred-ii- said.
but $image = $_FILES['image'] is a array, see the options for it here: http://php.net/manual/en/features.file-upload.post-method.php
Examples:
$image_name = $_FILES['image']['name'];
$image_size = $_FILES['image']['size'];
$image_tmpname = $_FILES['image']['tmp_name']; // this is a temporary name that php uses on every upload he does.
$image_type = $_FILES['image']['type'];
$image_error = $_FILES['image']['error'];

How to display all blobs (images) form database

Ok so i uploaded images with code below but i dont know how to display it, i want to make gallery so all i want is to display all images on one page, if you could explain that would be helpfull too!
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "phplogin";
$connect = mysqli_connect($servername,$username,$password,$dbname);
$file = $_FILES['image']['tmp_name'];
$ime = $_POST['ime'];
if(!isset($file))
{
echo "Izaberite sliku";
}
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 "Niste izabrali dobru sliku";
}
else
{
if(!$insert = mysqli_query($connect,"INSERT INTO store VALUES ('','$image_name','$image','$ime')"))
{
echo "Problem sa postavljanjem slike";
}
else
{
//$lastid = mysqli_insert_id($connect);
// I WANT TO DISPLAY IMAGES HERE
//echo "Image uploaded.<p />Slika:<p /><img src=get.php>";
}
}
}
?>
This code is to get image but it only display last ID and i dont know how to make it display all images
<?php
mysql_connect("localhost","root","") or die(mysql_error());
mysql_select_db("databaseimage") or die(mysql_error());
$id = addslashes($_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 $image;
?>
Save images as files instead of blobs. Store url to image in db as varchar
The html
<form role="form" class="form-inline" enctype="multipart/form-data" method="post" action="">
<div class="form-group">
<input type="file" class="form-control" name="image"/>
</div>
<input type="submit" name="upload" class="btn btn-success" value="Upload" />
</form>
php
define('UPLOAD_PATH','images/');
This is the constant for the path of the images. In this case its a folder named images in the same directory as the script you are working on
$errors = array();
function output_errors($errors){
$output=array();
foreach($errors as $error){
$output[]='<li>'.$error.'</li>';
}
return '<ul>'.implode('',$output).'</ul>';
}
if(isset($_POST['upload'])){
if(!empty($_FILES['image']['name'])){
$image=$_FILES['image']['name'];
$image_type=$_FILES['image']['type'];
$image_size=$_FILES['image']['size'];
if((($image_type=='image/gif') || ($image_type=='image/jpeg') || ($image_type=='image/png') || ($image_type=='image/pjpeg')) &&
($image_size>0) /*&& ($image_size<=MAX_FILE_SIZE)*/){
if($_FILES['image']['error']==0){
/*give each image a unique name*/
$image=microtime().$image;
/*move uploaded file to permanent folder*/
$target=UPLOAD_PATH.$image;
if(move_uploaded_file($_FILES['image']['tmp_name'],$target)){
if(mysqli_query($connect,"INSERT INTO images(`image`) VALUES ('$image')") ){
$message="Image was uploaded sucessfully";
}else{
$errors[]="Error,image was not uploaded successfully";
/*delete permanent file from server*/
#unlink(UPLOAD_PATH.$image);
}
}/*end of move uploaded file*/
}
}else{
$errors[]="File uploaded must be of type png, jpeg or gif";
/*delete temporary image file*/
#unlink($_FILES['image']['tmp_name']);
}/*end of image validation*/
}else{
$errors[]="Please select an image file";
}/*empty*/
}
if(!empty($errors))echo output_errors($errors);
if(!empty($message)) echo $message;
Your images table could appear like this
CREATE TABLE IF NOT EXISTS `images` (
`image_id` int(11) NOT NULL,
`image` varchar(255) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=latin1;
To get an image from db, you could have a query that selects image from table images. To display image in html do
$queryImage=mysqli_query($connect,"SELECT `image` FROM images");
while($rowImage=mysqli_fetch_assoc($queryImage)){?>
<img src="<?php echo UPLOAD_PATH.$rowImage['image'] ;?>" style="width:250px; height:200px"/>
<?php
}/*end of while loop getting images*/?>

Can't display image after uploading it to a data base, PHP and Mysql

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

fetch image from mysql php

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;
}

Save image as a blob type

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'];
?>

Categories