2013-12-10 64 views
1

我有兩個文件,一個用於上傳圖像,另一個用於從數據庫檢索圖像並將其顯示在網頁上。但是圖像只顯示爲破碎的圖像圖標。我不懂爲什麼。使用PHP顯示來自SQL BLOB的圖像

感謝您提前提供任何幫助。

HTML表單:

<form action="index.php" method="POST" enctype="multipart/form-data"> 

    <label for="image">File:</label> 
    <input type="file" name="image"> 
    <input type="submit" value="Upload"> 

</form> 

要上傳的PHP(到數據庫的連接下面的冷落,但它完美):

//file stuff 
$file= $_FILES['image']['tmp_name']; 

if(!isset($file)) 
    echo "Please select an image"; 

else { 

    $image=addslashes(file_get_contents($_FILES['image']['tmp_name'])); 
    $imageName=addslashes($_FILES['image']['name']); 
    $imageSize=getimagesize($_FILES['image']['tmp_name']); 
    if(!$imageSize) 
     echo "Thats not an image you mong"; 
    else { 

     //upload  
     $query="INSERT INTO store VALUES('','$imageName','$image')"; 
     $sendQuery=mysql_query($query); 
     if(!$sendQuery) 
      echo "This is embarressing. It didn't work"; 
     else { 

      $lastid=mysql_insert_id(); 
      echo "Image was uploaded. <br>Your image:"; 
      echo "<img src=get.php?id=$lastid/>"; 


     } 
    }  

} 

的PHP檢索圖像(再次DB連接被排除在下面,但完美的作品):

$id=addslashes($_REQUEST(['id'])); 

$imageQuery="SELECT * FROM store WHERE id=$id;"; 
$sendImageQuery=mysql_query($imageQuery); 
$image=mysql_fetch_assoc($sendImageQuery); 

$image=$image['image']; 

header("Content-type: image/jpeg"); 

echo $image; 

回答

2

請確保打開php標記是文件的第一行。如果開頭的php標籤不在文件的第一行,那麼內容已經寫入響應,導致對header()函數的調用被忽略。

<?php // this has to be on line 1 

// do database connections stuff, no output can be sent to the response. 
$id=addslashes($_REQUEST(['id'])); 

$imageQuery="SELECT * FROM store WHERE id=$id;"; 
$sendImageQuery=mysql_query($imageQuery); 
$image=mysql_fetch_assoc($sendImageQuery); 

$image=$image['image']; 

header("Content-type: image/jpeg"); 

echo $image; 

?> 
+0

我故意遺漏了php標籤和db連接。 – mickzer

+0

試試看看它是否有效。 10次​​中有9次是問題所在。 – robbmj

+0

在真實文件中,我有php標籤和db連接。我在上面已經指出,這絕對不是問題。 – mickzer

0

魔術報價設定(magic_quotes_gpc)中也許有,嘗試:

$image=stripslashes($image['image']); 

您應該使用mysql_real_escape_string()代替addslashes()且僅當魔術引號未啓用。