Re: cant view image from database

From: Date: Thu, 12 Feb 2015 19:18:21 +0000
Subject: Re: cant view image from database
References: 1 2 3  Groups: php.general 
Request: Send a blank email to php-general+get-324441@lists.php.net to get a copy of this message
On 12-2-2015 20:00, hadi wrote:
Hi,
I can't view my image from mysql database.
I used curl to download the image to mysql database, and im trying to view
the image, im getting error from firefox debugger.
Here is my code for downloading the image
<?php
$servername = "localhost";
$username = "recorduser";
$password = "password123";
$database = "record";
// Create connection
$conn = mysqli_connect($servername, $username, $password,
$database);
// Check connection
if (!$conn) {
     die("Connection failed: " . mysqli_connect_error());
}
$ch = curl_init
("http://www.albaldnews.com/upimages/news/thumb_albald11-
04-2014-993734.jpg"
);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
$rawdata=curl_exec ($ch);
curl_close ($ch);
$rawdata = addslashes($rawdata);
$sql = "INSERT INTO picture (image)VALUES ('$rawdata')";
$result = mysqli_query($conn, $sql);
?>
And the code for viewing the image as flow;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>dispaly image</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<?php
#header("Content-type: image/jpeg");
$servername = "localhost";
$username = "recorduser";
$password = "password123";
$database = "record";
// Create connection
$conn = mysqli_connect($servername, $username, $password,
$database);
// Check connection
if (!$conn) {
     die("Connection failed: " . mysqli_connect_error());
}
$sql = "SELECT * FROM picture";
$result = mysqli_query($conn, $sql);
header("Content-type: image/jpeg");
$row = mysqli_fetch_array($result);
$img = $row["image"];
echo '<img src="'.$img.'" />';
?>
Firefox error code:
<img src="http://192.168.206.129/rssfeed/showimage.php" alt="The image
"http://192.168.206.129/rssfeed/showimage.php" cannot be displayed
because
well of course you are... Let's establish a few baselines: 1 - an HTML page is basically a bunch of text data, which may contain *links* to other data via URIs (such as an URL like http://www.example.com/image.jpg or /images/image.jpg) 2 - an image is basically a bunch of BINARY data (so NOT text(!!)) on its own. 3 - combining BINARY data INSIDE an HTML file does NOT work (except under very specific circumstances). So... what did you do wrong? Well, simply put: 1 - you altered your image data by use of addslashes() to binary data. Which means you've just corrupted the image-data, making it impossible to show without undoing the damage. Using Stuart's suggestion you would not have to do this. 2 - You are putting BINARY data inside an HTML tag. The tag however requires an URL and NOT raw data. How to fix this? 1 - get rid of the addslashes and use a prepared statement to insert the image data. 2 - instead of echoing the data, link it to a new PHP page (for instance showImage.php) 3 - inside this showImage.php file retrieve the image data just as you have done above, but do NOT echo or print ANYTHING except this image data from the database and a header with the content-type. - Tul --- This email has been checked for viruses by Avast antivirus software. http://www.avast.com

« previous php.general (#324441) next »