PHP数据库图像未从数据库加载

时间:2014-04-20 01:45:36

标签: php sql database

第一行代码。

$sql = "SELECT `id`,
               `username`,
               `password`,
               `firstname`,
               `lastname`,
               `activated`,
               `email`,
               `randSalt`,
               `photo`
          FROM `TEST`
         WHERE username = '$usname'";
$query = mysqli_query($dbCon, $sql);
$row = mysqli_fetch_row($query);
$uid = $row[0];
$dbUsname = $row[1];
$dbPassword = $row[2];
// Check if the username and the password they entered was correct
if ($usname == $dbUsname && $paswd == $dbPassword) {
    // Set session 
    $_SESSION['username'] = $usname;
    $_SESSION['id'] = $uid;
    $photo = $row[0];
    // Now direct to users feed
    header("Location: user.php");

在我的其他代码user.php上,我有一行代码:

<img class="pp" src="<?php echo $photo;?>"/>

但它没有显示图像!

4 个答案:

答案 0 :(得分:0)

您可能需要更改行

$photo = $row[8];

你应该像这样生成html:

<img class="pp"                
       src='data:image/jpeg;base64, LzlqLzRBQ...<!-- base64 data -->' />

如果您没有将数据存储在base64编码的数据库中,那么您可能需要使用PHP函数base64_encode

答案 1 :(得分:0)

如果您只在数据库中存储照片的路径,请尝试以下操作:

$_SESSION['photo'] = $row[8];

在user.php中:

<img class="pp" src="<?php echo $_SESSION['photo']; ?>"/>

这是您问题的最简单但不是最佳解决方案。更好的方法是在这种情况下,如果您在用户页面中进行查询,即获取用户数据,则依赖于SESSION用户ID isset并且有效。

答案 2 :(得分:0)

假设您将图像本身存储在数据库中(而不是图像的路径),则需要在HTML中包含内嵌的base64图像。你的输出应该是:

<img class="pp" src="data:image/jpeg;base64,<?php echo $photo; ?>"/>

这假设您的图像是JPEG。他们不是,将image/jpeg更改为image/png或您正在使用的任何图片格式。

您需要将$photo作业更改为:

$photo = $row[8];

使用$row[0]会将ID分配给$photo,而不是照片列中存储的内容。

如果你的图像存储了base64编码,你需要在输出之前对它们进行编码。在这种情况下,当您指定照片变量时,请执行以下操作:

$photo = base64_encode($row[8]);

答案 3 :(得分:0)

user.php

中试试
<?php
if (session_status() == PHP_SESSION_NONE) { session_start(); }

$photo = '/img/default.png'; // A default photo if none is provided

$uid = false;
if(isset($_SESSION['id'])) {
    $uid = filter_var($_SESSION['id'], FILTER_VALIDATE_INT); 
}

if($uid !== false) {
    // User ID is set in session variable and was integer

    $sql = "SELECT `photo` FROM `TEST` WHERE `id`=" . $uid . " LIMIT 1;";
    $query = mysqli_query($dbCon, $sql);
    if($query) {
        if($row = mysqli_fetch_row($query)) {
            if(trim($row[0] . '') != '') {
                // if img is not stored as base64, then make sure field type is blob
                $photo = 'data:image/jpg;base64,' . base64_encode($row[0]);

                // if img is stored as base64, then uncomment the following line and comment above line
                // $photo = 'data:image/jpg;base64,' . base64_encode($row[0]);
            }
        }
        mysqli_free_result($query);
    }
    mysqli_close($dbCon);
?>
<img src="<?php echo $photo; ?>" />

基本上,它执行以下操作:

  • 检查会话是否存在并启动它
  • 检查并清理$_SESSION['id']为整数(假设您的id字段为自动编号整数)
  • 打开数据库连接,并使用与id
  • 中存储的$_SESSION相关联的照片数据
  • 如果找不到图像,请使用'/img/default.png'(可配置)作为默认值。
  • 清理数据库连接并从找到的结果中释放内存。

里面有两个选项:

- 第一种方法假定您将图像存储为BINARY LARGE OBJECT(也称为BLOB),并且不考虑从数据库中流式传输的非常大的图像。
- 第二种方法(注释掉)假设您在存储之前base64_encode了图像。

所有情况下,假设该字段足够大以完全存储图像。


脚注:从您发布的第一个块中删除$photo = $row[0];,因为它什么都不做。这段代码绝不会以user.php的方式写入。