Storing then displaying image from database

Hi, wondering if somebody can tell me where I’m going wrong (I’m new to all of this). I have the following php code which uploads an image file into my database:

    //Connect to database
    include 'Resources/Include/db.inc.php';

    $tmp=$_FILES['image']['tmp_name'];
    //get users IP
    $ip=$_SERVER['REMOTE_ADDR'];

    //Don't do anything if file wasn't selected
    if (!empty($tmp)) {

    //Copy file to temporary folder
    copy($tmp, "./temporary/".$ip."");

    //open the copied image, ready to encode into text to go into the database
    $filename1 = "./temporary/".$ip;
    $fp1 = fopen($filename1, "rb");

    //record the image contents into a variable
    $contents1 = fread($fp1, filesize($filename1));

    $contents1 = addslashes($contents1);

    //close the file
    fclose($fp1);

    $ftype = $_FILES['image']['type'];

    //insert information into the database
    if(!mysql_query("INSERT INTO LetterImages (Data,Type,LetterID,Page)"." VALUES ( '$contents1', '$ftype',1,1)")){
    echo mysql_error();
    }

    //delete the temporary file we made
    unlink($filename1);

    }

This seems to work ok, as when I go to the LetterImages table there is now an additional row with a file in the blob field. I then have the following code which is supposed to display the image:

   $result=mysql_query("SELECT * FROM LetterImages WHERE LetterID=1 AND Page=1");

    //fetch data from database
    $sqldata=mysql_fetch_array($result);

    $encoded=stripslashes($sqldata['Data']);
    $ftype=$sqldata['Type'];

    //tell the browser what type of image to display
    header("Content-type: $ftype");

    //decode and echo the image data
    echo $encoded;

Instead of displaying an image, however, this just displays pages and pages of incomprehensible data. Can anybody tell me where I’m going horribly wrong?

incomprehensible data

  • that is your image.

Any particular reason for wanting to save the image into the database rather than just the path?

Basically because I’m new to this and it seemed initially like the easiest option. I also think it’s got to be better for referential integrity. If I can’t get it to work like this, I’ll probably look at doing it using a file system but as I’ve already developed this script it would be easier for the time being to amend it so that it works (although I have been trying to fix all day without success!).

I would suspect $ftype - try echoing it and see what it contains.

I tried this, it says “image/jpeg” (obviously without the quotes)

“$contents1 = addslashes($contents1);” Why do you have addslashes?
You script is also very very insecure.