Задать вопрос
@vvv7220
Тракторист

Как правильно отправить в базу данных сразу несколько ссылок на картинки?

Есть сайт с формой и полем для выбора картинок и загрузки их на страницу сайта. То есть я могу сразу выбирать несколько картинок для загрузки, а не по одной. Соответственно эти ссылки на картинки нужно отправить сначала в БД и потом их оттуда вставлять на сайт. Я делаю массив ссылок и при помощи json_encode делаю из них строку и отправляю в БД. Они благополучно там сохраняются. Но вот обратно из БД я их не могу вставить на сайт в виде картинок, так как там лишние кавычки. Также мне кажется это не правильно вставлять все ссылки в одно поле. А как тогда разнести ссылки по отдельным полям?
<form action="hook_register.php" method="post" enctype="multipart/form-data">
                <div class="form-group">
                    <label for="login">Логин</label>
                    <input type="text" name="login" id="login"">
                    <label for="email">Почта</label>
                    <input type="email" name="email" id="email">
                    <label for="avatar">Изображение профиля</label>
                    <input type="file" name="avatar[]" accept=".jpg,.jpeg,.png,.gif">
                    <label for="pass">Пароль</label>
                    <input type="password" name="pass" id="pass">
                    <label for="pass_double">Повторите пароль</label>
                    <input type="password" name="pass_double" id="pass_double">
                    <input type="submit">
                </div>
            </form>

if ($pass === $pass_double) {
    $img_avatar = [];
    foreach (array_keys($_FILES["avatar"]["name"]) as $key) {
        $uploads_dir = 'uploads/' . time() . $_FILES["avatar"]["name"][$key];
        $tmp_name = $_FILES["avatar"]["tmp_name"][$key];
        move_uploaded_file($tmp_name, "$uploads_dir");
        $img_avatar[] = '<img src="$uploads_dir">';
    }
    $json_avatar = json_encode($img_avatar);
    mysqli_query($conn, "INSERT INTO `auth` (`id`, `login`, `email`, `avatar_json`, `pass`, `pass_double`) VALUES (NULL, '$login', '$email', '$json_avatar', '$pass', '$pass_double')");
}
    $json_avatar = json_encode($img_avatar);
var_dump($json_avatar);
$sql_get = mysqli_query($conn, "SELECT * FROM `auth` WHERE `login` = 'mmm'");
$result = mysqli_fetch_assoc($sql_get);
$result = $result['avatar_json'];

6312ae005e404937143009.jpeg
6312ae2a34aa3267208976.jpeg
PS Кстати создателям этого сайта полезно изучить этот вопрос тоже. Потому что крайне не удобно выбирать по одной картинке для вставки на сайт. Посмотрите как это сделано на ответах майл ру
  • Вопрос задан
  • 136 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
То есть весь вопрос сводится к "при записи я кодирую данные c помощью json_encode, а при выводе не раскодирую, но виноваты создатели этого сайта".

Но главные проблемы этого кода конечно не в json.
Во-первых, этот код позволяет заливать РНР файлы, и первый же малолетний придурок этим воспользуется.
Во-вторых, этот код пропускает SQL инъекцию, и первый же малолетний придурок этим воспользуется.
Остальное уже мелочи.

Но если отвечать на вопрос в целом, то да - вставлять все ссылки в одно поле это действительно неправильно.
Плюс, в БД всегда должны храниться только сырые данные, а любое форматирование добавляться только при выводе. То есть сохранять надо только сами имена файлов.

Но в данном случае вообще непонятно, зачем сохранять ссылки в БД.
При заливке берётся id созданного пользователя, создаётся папка с таким именем, и в неё заливаются файлы.
При выводе файлы читаются из этой папки и выводятся.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы