PHP-使用图像附件查看所有注释,仅显示数据库中的最后一个条目

PHP-使用图像附件查看所有注释,仅显示数据库中的最后一个条目,php,mysql,image,session,comments,Php,Mysql,Image,Session,Comments,嗨,我是php和html新手。我正在尝试为我的第一个网站制作一个页面,在那里你可以查看网站上发布的所有评论。这些评论有图片附件。所有信息都存储在mysql数据库中 我创建了一个while循环,以便在每个评论和图像之后相互呼应。文本和用户名在每个循环周期中都会正确更新,但所有图像都是相同的(最后加载的图片)。我一直在想办法,但没办法 while($query_row = mysql_fetch_assoc($query_run)) { $username = $query_row['userna

嗨,我是php和html新手。我正在尝试为我的第一个网站制作一个页面,在那里你可以查看网站上发布的所有评论。这些评论有图片附件。所有信息都存储在mysql数据库中

我创建了一个while循环,以便在每个评论和图像之后相互呼应。文本和用户名在每个循环周期中都会正确更新,但所有图像都是相同的(最后加载的图片)。我一直在想办法,但没办法

while($query_row = mysql_fetch_assoc($query_run))
{

$username = $query_row['username'];
$comment = $query_row['text'];
$id = $query_row['id'];
$image = $query_row['image'];

$_SESSION['comment_image'] = $image;

echo "Comment by <strong>$username</strong><br>";
echo $comment.'<br>';


echo '<img src=get_image.php><br>';
}
输出:

Comment by USER1
text1
image3

Comment by USER2
text2
image3

Comment bu USER3
text3
image3

所以问题是,当每个注释应该是image1,然后是image2,然后是image3时,image3会在每个注释上得到回显,依此类推。该图像似乎是显示的最后一条注释中的图像。

停止使用blob,将图像文件名\路径存储在数据库中要容易得多。。但是如果你别无选择

改变

echo '<img src=get_image.php><br>';
echo'
';

echo';
更改get_image.php,如下所示:

<?php
$id = (isset($_GET['id']) && is_numeric($_GET['id'])) ? intval($_GET['id']) : 0;
$image = image_from_db($id); // what ever you use to query the db

header('Content-Type: image/jpeg');
echo $image;
?>

要在输出标记时输出图像,而不是链接到另一个脚本以输出图像,请添加以下函数,并使用图像变量从循环中调用它

(从这里的答案-)

echo'
';
不,那不行。它只输出图像的文本信息。只是一堆随机字符。我已经明白了。变量中包含图像的二进制内容。更新的解决方案消除了对另一个脚本和对数据库的另一次调用的需要,因为您在创建图像标记的循环中已经有图像数据。图像是数据库中的blob吗?是的,这正是它的内容。@user2900397更改了答案,以匹配blob UsageHanks的工作方式!但还有一件事,为什么将图像存储为blob并存储在数据库中不是一个好主意?@user2900397,有关将图像存储在blob中与存储在数据库之外的优缺点,请参阅我的答案
echo '<img src="get_image.php?'.id=$id.'" />';
<?php
$id = (isset($_GET['id']) && is_numeric($_GET['id'])) ? intval($_GET['id']) : 0;
$image = image_from_db($id); // what ever you use to query the db

header('Content-Type: image/jpeg');
echo $image;
?>
function data_uri($contents, $mime) 
{  
    $base64   = base64_encode($contents); 
    return ('data:' . $mime . ';base64,' . $base64);
}
echo '<img src="' . data_uri($image,'image/jpeg') .'"><br>';