Добавить данные после других данных в JSON (PHP) - PullRequest
0 голосов
/ 03 февраля 2020

Здравствуйте, разработчики.

Чтобы создать автоматическую c функцию Drag n 'Drop в PHP для загрузки файлов, я застрял в обновлении данных после сохранения первого файла. Действительно, я храню в своей базе данных таблицу JSON, которая содержит имя файла, его путь и тип.

Это выглядит примерно так:

{
    "1": {
        "name": "1",
        "path": "/files/project/customer1/pictures/",
        "type": "jpeg"
    }
}

enter image description here

Однако, если сейчас я добавлю другой файл, я не смогу найти решение, чтобы добавить его в соответствии с моей JSON структурой.

Я бы хотел, чтобы следуйте этой логике c:

{
    "1": {
        "name": "img1",
        "path": "/files/project/customer1/pictures/",
        "type": "jpeg"
    },

    "2": {
        "name": "img2",
        "path": "/files/project/customer1/pictures/",
        "type": "jpeg"
    }
}

Вот условие, которое я сделал. Я использую библиотеку MEDOO в PHP, поэтому функция обновления .

перед функцией получает все после "." восстановите тип файла.

<?php
if ($error == "") {
    echo $_FILES["$name"]["name"] . " a bien été téléchargé";
    $jsonOrig = '';
    $jsonOrig = $database->get($table, 'attachment', ['id' => $table_id]);
    $database->update(
        $table,
        ['attachment' => Core::jsonify(
            $jsonOrig,
            ['name' => $this->before('.', $_FILES["$name"]["name"]), 'path' => '/files/' . $path . '/', 'type' => $ext],
            1
        )],
        ['id' => $table_id]
    );
}

Функция jsonify позволяет автоматически генерировать JSON.

<?php
    public static function jsonify($jsonOrig = array(), $jsonAdd, $where = "")
    {
        header('Content-Type: application/json');
        if (!is_array($jsonOrig)) {
            $jsonOrig = json_decode($jsonOrig, true);
        }

        if (!is_array($jsonAdd)) {
            $jsonAdd = json_decode($jsonAdd, true);
        }

        if (empty($where)) $jsonOrig[] = $jsonAdd;
        else $jsonOrig[$where] = $jsonAdd;

        return json_encode($jsonOrig, JSON_PRETTY_PRINT);
    }

Вот однажды использованная функция

// parameter one = input file name
// parameter two = The path where the file will be uploaded
// parameter three = table name database
// parameter four = id where add the json file in the database 
$Files->addFile('file', 'projets/client2/photos', 'articles', 54);

Заранее благодарю за помощь.

1 Ответ

2 голосов
/ 03 февраля 2020

Третий параметр Core::jsonify - это «$ where», означающий ключ, за которым вы будете хранить новый элемент в массиве. Если вы передадите 1, он всегда будет хранить значение за тем же ключом, фактически перекрывая ранее сохраненный элемент. Удалите этот параметр, и он будет правильно добавлен в массив (что здесь делается $jsonOrig[] при отсутствии ключа PHP добавляет новый элемент).

<?php
if ($error == "") {
    echo $_FILES["$name"]["name"] . " a bien été téléchargé";
    $jsonOrig = '';
    $jsonOrig = $database->get($table, 'attachment', ['id' => $table_id]);
    $database->update(
        $table,
        ['attachment' => Core::jsonify(
            $jsonOrig,
            ['name' => $this->before('.', $_FILES["$name"]["name"]), 'path' => '/files/' . $path . '/', 'type' => $ext]
            //remove the ",1"
        )],
        ['id' => $table_id]
    );
}

Если это не работает, это означает что get не получает должным образом существующие данные

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...