Karuppiah RK
Karuppiah RK

Reputation: 3964

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

Upvotes: 0

Views: 22333

Answers (5)

Satish Sharma
Satish Sharma

Reputation: 9635

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

Upvotes: 1

user3056620
user3056620

Reputation: 21

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.

Upvotes: 2

Stuart Miller
Stuart Miller

Reputation: 657

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.

Upvotes: 1

Krish R
Krish R

Reputation: 22741

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']) . '" />';
}

Upvotes: 5

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

Upvotes: 1

Related Questions