第一行代码。
$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;?>"/>
但它不显示图像!
您可能需要更改行
$photo = $row[8];
你应该生成这样的html:
<img class="pp"
src='data:image/jpeg;base64, LzlqLzRBQ...<!-- base64 data -->' />
若您并没有将已经用base64编码的数据存储在数据库中,那个么您可能需要使用PHP函数base64_encode。
如果您在数据库中只存储照片的路径,请尝试以下操作:
$_SESSION['photo'] = $row[8];
在user.php中:
<img class="pp" src="<?php echo $_SESSION['photo']; ?>"/>
这是解决你的问题最简单但不是最好的办法。在这种情况下,更好的方法是,如果您在用户页面中进行查询,即获取用户数据,取决于SESSION用户ID是否已设置且有效。
假设您将图像本身存储在数据库中(而不是图像的路径),则需要在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
,而不是存储在照片列中的ID。
如果您的图像不是存储的base64编码图像,则在输出图像之前需要对其进行编码。在这种情况下,当您分配照片变量时,请执行以下操作:
$photo = base64_encode($row[8]);
在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
字段是自动编号整数) - 打开数据库连接并使用存储在
$_SESSION
中的与id
相关联的照片数据 - 如果找不到图像,则使用"/img/default.png"(可配置)作为默认值
- 清理数据库连接并从找到的结果中释放内存
里面有两个选项:
-第一种方法假设您将图像存储为二进制大对象(又称BLOB),并且不考虑需要从数据库流式传输的超大图像
-第二种方法(注释掉),假设您在存储图像之前对图像进行base64_encode
处理。
在所有情况下,假设字段足够大,可以完全存储图像。
脚注:从你发布的第一个区块中删除$photo = $row[0];
,因为它没有任何作用。这一行代码决不会以它的编写方式到达user.php
。