PHP/MySQL - 为使用BLOB的用户创建头像上传功能

PHP/MySQL - creating avatar upload function for users using BLOB

我正在创建一个论坛,目前正在尝试让我的用户能够更新他们的个人资料图片(头像)。我正在尝试使用 BLOB 执行此操作。我知道将图像存储在数据库中不是一个好主意,但这只是一个自学项目,将来不太可能考虑用于实际生活。

我目前遇到图像未保存在数据库中并导致以下错误的问题:

Notice: Undefined index: user_avatar in C:\wamp64\www\Latest_try\editprofile.php on line 24

我是 php 的新手(很明显),如果有人能帮助我理解我需要什么才能将图像保存到数据库,我将不胜感激。

我也想知道我是否可以像这样保存图像,或者我是否需要一个完整的单独 table 然后可以使用外键以某种方式 link 到用户信息。

下面是mysql table我正在使用的功能和问题。

mysql -> describe users;
+-----------------+-------------+------+-----+---------+--------------+
| Field           | Type        | Null | Key | Default | Extra        |
+-----------------+-------------+------+-----+---------+--------------+
| user_Id         | int(8)      | NO   | PRI | NULL    |auto_increment|
| user_name       | varchar(30) | NO   |     | NULL    |              |
| user_pass       | varchar(255)| NO   |     | NULL    |              |
| user_email      | varchar(255)| NO   |     | NULL    |              |
| user_date       | datetime    | NO   |     | NULL    |              |
| user_level      | int(8)      | NO   |     | NULL    |              |
| user_description| varchar(255)| YES  |     | NULL    |              |
| user_avatar     | longblob    | NO   |     | NULL    |              |
+-----------------+-------------+------+-----+---------+--------------+
8 rows in set (0.02 sec)

这是我的 editprofile.php 文件代码。

<?php
include 'connect.php';
include 'header.php';

if(!isset($_SESSION['signed_in']))
{
//the user is not logged in.
echo 'You must be <a href="/Latest_try/signin.php">Signed in</a> to add an image to your profile.'; 
}
else
{
if($_SERVER['REQUEST_METHOD']!='POST')
{
echo '<form action="" method="post" enctype="multipart/form-data">
Choose Image: <input type="file" name="user_avatar"><br/>
<input type="submit" name="submit" value="Upload">
</form>';
}
else
{
    $query = "INSERT INTO
                        users(user_avatar)
                    VALUES
                        ('" . mysqli_real_escape_string($link, $_POST['user_avatar']) . "',
                              NOW(),
                              '" . $_SESSION['user_id'] . "')";

$result=mysqli_query($link, $query);
if($result===false)
{
    mysqli_error($link);
}
     else
     {
         echo 'Your avatar has been updated!';
     }      
}
}
?>

将图片保存在数据库中是非常糟糕的做法columns.Instead将其保存在与项目相同目录的文件夹中,并将图片的名称保存到数据库中!!

如您所知,将图像保存在数据库中是一种不好的做法。但是,您遇到的问题是由于使用了不正确的变量。检查以下语句:

$query = "INSERT INTO
          users(user_avatar)
          VALUES
          ('" . mysqli_real_escape_string($link, $_FILES['user_avatar']['name']) . "',
          NOW(),
          '" . $_SESSION['user_id'] . "')";

你也可以参考更多关于这个here