Đó là bởi vì trình duyệt của bạn không nhận ra rằng dữ liệu bạn đang gửi lại là một hình ảnh. Khi máy chủ web của bạn phản hồi một yêu cầu, nó đã chỉ định loại nội dung (do đó là tiêu đề Loại-Nội dung) và trang của bạn đang được chỉ định dưới dạng văn bản. Đây là lý do tại sao thẻ hình ảnh được sử dụng:chúng cho bạn cơ hội để nói "nhúng tài nguyên khác này vào vị trí này". Những gì mã của bạn làm là kết xuất dữ liệu nhị phân của hình ảnh dưới dạng văn bản trên màn hình - không phải những gì bạn muốn.
Những gì bạn cần làm là tạo một trang PHP khác, chẳng hạn như getImage.php, chấp nhận một tham số $ _GET (tức là một id hàng). Trang đó sau đó sẽ truy vấn cơ sở dữ liệu và echo
dữ liệu hình ảnh, chỉ định tiêu đề Loại-Nội dung.
Dưới đây là một số bằng chứng về mã khái niệm mà tôi đã viết mà không cần thử nghiệm và điều đó không xử lý việc đưa vào SQL hoặc một số vấn đề tiềm ẩn khác.
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'];
}
Bây giờ, khi bạn đang xây dựng HTML trong tệp hiện có của mình, bạn sẽ làm như sau:
echo '<td class="sitename2"><img src="./getImage.php?q='.$row["id"].'"/></td>';
Điều chỉnh tên cột SQL của bạn cho phù hợp.
Chúc mừng.