2011-04-11 37 views
1

查詢和HTML表格正在打印出$row["title"],日期和row["text1"]太棒了。但是,$row["file_data"]存在一個問題,該問題應該是存儲在MySQL數據庫中的映像。它是從英語以外的語言中打印出來的大量字符。即BMö26(šÀ2ÿÿÿÿÿÿÿÿ等幾十行。來自MySQL數據庫的圖像未打印

如何讓圖像顯示?

由於提前,

約翰

$sqlStr = "SELECT s.title, s.datesubmitted, s.text1, s.text2, s.text3, s.cleanurl1, s.cleanurl2, s.cleanurl3, s.submissionid, i.image_id, i.filename, i.mime_type, i.file_size, i.file_data, i.photonumber 
     FROM submission s 
     JOIN images2 i on s.submissionid = i.submissionid 
    GROUP BY s.submissionid 
    ORDER BY s.datesubmitted DESC 
    LIMIT $offset, $rowsperpage";   

$tzFrom = new DateTimeZone('America/New_York'); 
$tzTo = new DateTimeZone('America/Phoenix'); 



// echo $dt->format(DATE_RFC822); 





$result = mysql_query($sqlStr); 

//header('Content-type: image/bmp'); 

$arr = array(); 
echo "<table class=\"samplesrec\">"; 
while ($row = mysql_fetch_array($result)) { 

    //header('Content-type: ' . $row['mime_type']); 
//header('Content-length: ' . $row['file_size']); 

    $dt = new DateTime($row["datesubmitted"], $tzFrom); 
    $dt->setTimezone($tzTo); 


    echo '<tr class="class3a">'; 
    echo '<td class="sitename1"><a href="http://www...com/blog">'.$row["title"].'</a></td>'; 
    echo '</tr>'; 
    echo '<tr class="class3b">'; 
    echo '<td class="sitename2name">'.$dt->format('F j, Y &\nb\sp &\nb\sp g:i a').'</td>'; 

    echo '</tr>'; 
    echo '<tr class="class3c">'; 
    echo '<td class="sitename2">'.$row["text1"].'</td>'; 
    echo '</tr>'; 

    echo '</tr>'; 
    echo '<tr class="class3c">'; 
    echo '<td class="sitename2">'.$row["file_data"].'</td>'; 
    echo '</tr>'; 



    } 
echo "</table>"; 

回答

1

這是因爲你的瀏覽器不意識到你發回的數據是圖像。當您的Web服務器響應請求時,它指定了它的內容類型(因此是Content-Type標頭),並且您的頁面被指定爲文本。這就是爲什麼使用圖像標籤的原因:它們讓你有機會說「在這個位置嵌入其他資源」。你的代碼所做的是將圖像的二進制數據作爲文本轉儲到屏幕上 - 而不是你想要的。

你需要做的是創建另一個PHP頁面,比如getImage.php,它接受$ _GET參數(即,一個行ID)。該頁面然後將查詢數據庫和echo圖像數據,指定Content-Type標題。

下面是我未經測試編寫的概念代碼證明,它不處理SQL注入或其他一些潛在問題。現在

header('Content-Type: image/png'); //change to the proper content type for your type of image 

$imageID = mysql_real_escape_string($_GET['q']); 

$result = mysql_query(sprintf('SELECT file_data FROM images2 WHERE id="%s" AND file_data IS NOT NULL LIMIT 1', $_GET['q'])); 

if(mysql_num_rows($result) !== 1) 
{ 
    //a row wasn't found, so 404 
    header('HTTP/1.0 404 File Not Found'); 
} 
else 
{ 
    $row = mysql_fetch_object($result); 
    echo $row['file_data']; 
} 

,當你建立你的HTML在你現有的文件,你會做這樣的事情:

echo '<td class="sitename2"><img src="./getImage.php?q='.$row["id"].'"/></td>'; 

相應地調整你的SQL列名。

乾杯。

1

原因是因爲存儲在數據庫中的圖像數據是圖像內容類型,這意味着它是圖像而不是文本。

您無法將圖像數據直接打印到文本頁面中,您必須將其推出到自己的實體中,在標題內添加正確的內容類型,以便瀏覽器知道如何處理它。

你應該做的是創建一個名爲image.php的單獨文件,並讓它代表你生成圖像。

例如:

<?php 

if(!empty($_GET['id']) && is_numeric($_GET['id'])) 
{ 
    //fetch the information for the database 
    //if the blob data is of the content type image/gif for instance 
    header('content-type: image/gif'); 
    echo $result['image_data']; 
} 

,然後在您的HTML頁面,請image.php產生圖像的奧尤。

<img src="image.php=<?php echo $result['image_id'] ?>" /> 
相關問題