2012-05-10 98 views
0

我試圖顯示存儲在mysql數據庫中的圖像。 我保存這樣說:顯示圖像從PHP文件(存儲在MySQL數據庫)

if (isset($_SESSION['mod']) && (isset($_GET['upload']))) { 
    if (isset($_FILES['image']) && $_FILES['image']['size'] > 0) { 

    $con = mysql_connect("localhost", "root"); 
    mysql_select_db("psi", $con); 

     // Temporary file name stored on the server 
     $tmpName = $_FILES['image']['tmp_name']; 

     // Read the file 
     $fp  = fopen($tmpName, 'r'); 
     $data = fread($fp, filesize($tmpName)); 
     $data = addslashes($data); 
     fclose($fp); 

     //now i use <tmpName> as an actual name of file 
     $tmpName = $_FILES['image']['name']; 
     if (isset($_GET['name'])) 
     $tmpName = $_GET['name']; 

     $uname = $_SESSION['uname']; 
     $idObj = mysql_query("SELECT id_object AS id FROM tobject WHERE uname = '$uname'"); 
     $idObj = mysql_fetch_assoc($idObj); 
     $idObj = $idObj['id']; 

     // Create the query and insert 
     // into our database. 
     $query = "INSERT INTO slike "; 
     $query .= "VALUES ('', '$idObj', '$data', '$tmpName')"; 
     $results = mysql_query($query, $con); 

     // Print results 
     print "Thank you, your file has been uploaded."; 

} 
else { 
    print "No image selected/uploaded"; 
} 

}

我想這是確定..它確實店東西在DB(合適的大小),但我看不出它是手動的..所以, ,當我嘗試使用此代碼獲取它:

else if (isset($_GET['idSlike'])) { 
$idSlike = $_GET['idSlike']; 

    $con = mysql_connect("localhost", "root"); 
    mysql_select_db("psi", $con); 

$res = mysql_query("SELECT slika FROM slike WHERE id_slika = '$idSlike'"); 
if (!$res) { 
    die("greska: " . mysql_error()); 
}; 

$slika = mysql_fetch_array($res); 
$slika = $slika['slika']; 
header('Content-Type: ' . $slika['mimetype']); 
echo $slika; 
} 

注:兩個存儲和從數據庫中獲取圖像都在同一個文件 (image.php)...

我不明白什麼... 我試圖顯示它:

<img src="image.php?idSlike=10"/> 

我硬編碼的ID,但是他們在數據庫中存在

我也試圖與

echo "<img src=\"image.php?idSlike=13\">"; 

通過另一個php文件,但我得到的是一個空的圖像(與正確的src)

我使用xampp(mysql 5.5.16; PHP 5.3.8)...

+0

除了你的問題在你的問題陳述;看看SQL注入。你的腳本很脆弱! – stUrb

+0

感謝提及..我看着它.. :) – maricn

+0

請不要用古老的'mysql_ *'函數編寫新代碼。他們不再被維護,社區已經開始[棄用流程](http://goo.gl/KJveJ)。相反,您應該瞭解[準備好的語句](http://goo.gl/vn8zQ)並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能決定,[本文](http://goo.gl/3gqF9)將有助於選擇。如果你關心學習,[這裏是一個很好的PDO相關教程](http://goo.gl/vFWnC)。 –

回答

1

打開提供通知和警告在你的開發環境:

ini_set("display_errors", 1); 
error_reporting(E_ALL); 

你正在做的事情是不sensicle(如果你的PHP會告訴你這件事讓它):

$slika = mysql_fetch_array($res); 
$slika = $slika['slika']; 
header('Content-Type: ' . $slika['mimetype']); // <-- $slika is a string not an array 
echo $slika; // <-- if $slika is an array here, you can not echo is like this 
+0

錯誤報告沒有報告任何東西... – maricn

+0

確保你有ini_set(「display_errors」,1);' – Halcyon

+0

我幾乎是這個領域的noob,所以對echo- ing數組會很好... 我認爲,因爲:$ slika = $ slika ['slika'];我正在直接訪問BLOB ... – maricn

相關問題