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

PHP/MySQL-使用BLOB为用户创建头像上传功能,php,mysql,blob,avatar,Php,Mysql,Blob,Avatar,我正在创建一个论坛,目前正试图让我的用户能够更新他们的个人资料图片(头像)。我正试图用BLOB做这件事。我知道在数据库中存储图像不是一个好主意,但这只是一个自学项目,将来不太可能考虑用于实际生活 我目前遇到图像未保存在数据库中的问题,并导致以下错误: Notice: Undefined index: user_avatar in C:\wamp64\www\Latest_try\editprofile.php on line 24 我是一个php新手(很明显),如果有人能帮助我理解我需要什么,

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

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

Notice: Undefined index: user_avatar in C:\wamp64\www\Latest_try\editprofile.php on line 24
我是一个php新手(很明显),如果有人能帮助我理解我需要什么,让它将图像保存到数据库中,我将不胜感激

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

下面是我使用的与函数和问题相关的mysql表

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!';
     }      
}
}
?>

将图片保存在数据库列中的做法非常糟糕。请将其保存在文件夹中,该文件夹与您的项目和图片名称位于同一目录下,并保存到数据库

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

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

您还可以参考更多信息。

对于我们使用的输入类型文件,
$\u文件['user\u avatar']['name']将记住这一点。谢谢。你试过调试这个问题吗?请注意,您的代码对SQL注入是开放的。我非常清楚这一点,但出于学习目的,最好从我个人的角度了解BLOB的功能。这并不能回答给定的问题。给定的错误消息具有完全不同的来源谢谢。这是我第一次遇到这个变量“$\u FILES”,这是否意味着我不需要这个字符串?“if($\u SERVER['REQUEST\u METHOD']!='POST')”@Richard您可以使用它来检查这是否是一个已发布的页面,但出于您的需要,您更愿意使用
if(count($\u FILES)>0
,如我在答案中共享的链接所示。@Richard如果有任何答案有效,请标记为答案并向上投票:)