2012-05-10 94 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

相关问题