Я создаю форум и в настоящее время пытаюсь разрешить моим пользователям обновлять фотографию своего профиля (аватар). Я пытаюсь сделать это с 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'] . "')";
Вы также можете обратиться больше об этом Вот.
Это действительно плохая практика — сохранять изображения в столбцах базы данных. Вместо этого сохраняйте их в папке, которая находится в том же каталоге, что и ваш проект, а имя изображения сохраните в базе данных !!