查询和HTML表格打印出$row["title"]
,日期和row["text1"]
非常棒。但是,$row["file_data"]
存在问题,应该是存储在MySQL数据库中的图像。它是用英语以外的语言打印出的大量字符,i。即几十行BMö26(šÀ2ÿÿÿÿÿÿÿÿ
等。
如何显示图像?
提前致谢,
约翰
$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>";
答案 0 :(得分: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 :(得分: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为oyu生成图像。
<img src="image.php=<?php echo $result['image_id'] ?>" />