mysql — PHP / MYSL — создание функции загрузки аватара для пользователей, использующих BLOB

Я создаю форум и в настоящее время пытаюсь разрешить моим пользователям обновлять фотографию своего профиля (аватар). Я пытаюсь сделать это с 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!';
}
}
}
?>

0

Решение

Как вы уже знаете, сохранение изображений в БД — плохая практика. Однако проблема, которая возникает у вас, связана с использованием неверной переменной. Проверьте следующее утверждение:

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

Вы также можете обратиться больше об этом Вот.

0

Другие решения

Это действительно плохая практика — сохранять изображения в столбцах базы данных. Вместо этого сохраняйте их в папке, которая находится в том же каталоге, что и ваш проект, а имя изображения сохраните в базе данных !!

0