Re: cant view image from database

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php





[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux