无法使用PHP显示数据库中的图像

时间:2013-12-30 01:35:09

标签: php mysql image

代码截图: screenshot

if ($_SERVER['REQUEST_METHOD'] == 'GET') {
    require ('../../mysqli_oop_connect.php'); //Connect to the database.
    $errors = array(); // Initialize an error array.

// Check for an isbn:
if (empty($_GET['isbn'])) {
    $errors[] = 'You forgot to enter the ISBN-13.';
} else {
    $isbn = $mysqli->real_escape_string(trim($_GET['isbn'])); 
}   

if (empty($errors)) {   
    //Make the query:
    $q = "SELECT * FROM books WHERE isbn=$isbn";
    $r = $mysqli->query($q);
    $num = $r->num_rows;

    if ($num == 0) { // If it fails to run:
        echo "<br /><br /><p>This book is currently not listed in our database. Would you like to add it?</p>\n";
        //HERE IS WHERE IT NEEDS TO REDIRECT TO A PAGE THAT ALLOWS THE CONTENT TO BE ADDED TO THE DB LIKE REGISTER.PHP DOES.
    } else { //If it suceeds then run the query:
        echo '<h1>Is this your book?</h1>';

    while ($row = $r->fetch_object()) { // POST DATA FROM DB.
        echo '<img src="$row->image" height="100" width="100">' . '<br />' . $row->name . '<br />' . $row->isbn ;

其余代码只是关闭数据库连接。

我不知道该图标的含义或代码中的问题所在。 DB在表中设置了三列:image,isbn和name。目标是让本书显示从数据库中检索的数据。它根据查询显示数据库中的所有三个项目,但图像是其他内容。 HTML正在识别正在检索图像,因为当我只是执行$ row-&gt;图像时,它会发疯并发布随机的废话,因为它应该是在显示图像的时候。非常感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

echo '<img src="'.$row->image.'" height="100" width="100"><br />' . $row->name . '<br />' . $row->isbn ;

尝试这种方式,并且最好打印图像路径并检查它是否存在或是否存在,是的,您还可以检查图像元素并检查图像的路径。

在问题中,是否在db64中保存了图像链接或在base64中保存了图像数据。假设db具有图像链接,则给出答案。

答案 1 :(得分:1)

我会从你的评论中猜出你的图像存储在数据库中的'怪胎并发布随机废话',而不是你图像的路径。如果是这样,您就不能简单地回显<img>标记中的图像数据。 src属性需要一个URL,您可以通过以下两种方式之一创建该URL:创建一个脚本,该脚本使用适当的标头为图像提供服务,并使用该脚本的URL作为src属性;或者,创建数据URI并在页面中包含数据。后者可能是最简单的,但可能会增加页面的加载时间。方法如下:

// base64 encode image data and prepend the header
$imgURL = "data:image/png;base64,".base64_encode($row->image);  

echo '<img src="'.$imgURL.'" height="100" width="100">' .
     '<br />' . $row->name . '<br />' . $row->isbn ;

注意 - 您需要更改dataURL标头以发送正确的图片类型:image/jpgimage/png等。

答案 2 :(得分:0)

您不能使用单引号进行字符串替换。它只会将文字$row->image放在echo

echo '<img src="$row->image" height="100" width="100">' . '<br />' . $row->name . '<br />' . $row->isbn ;

请改为尝试:

echo "<img src='$row->image' height='100' width='100'>" . '<br />' . $row->name . '<br />' . $row->isbn ;

或者这个:

echo '<img src="' . $row->image . '" height="100" width="100">' . '<br />' . $row->name . '<br />' . $row->isbn ;

就个人而言,我更喜欢这样使用sprintf

echo sprintf('<img src="%s" height="100" width="100">', $row->image) . '<br />' . $row->name . '<br />' . $row->isbn ;

但最重要的是,为了让您的调试生活更轻松,我建议您将PHP代码格式化为更容易阅读:

echo sprintf('<img src="%s" height="100" width="100">', $row->image)
   . '<br />'
   . $row->name
   . '<br />'
   . $row->isbn
   ;

您的代码从一开始就越干净,就越容易发现缺陷。它们出现时的错误。