Передача файла JSON на сервер php и последующее сохранение данных из него в базу данных Mysql - PullRequest
0 голосов
/ 26 марта 2020

Как говорит Титл, я пишу веб-приложение как часть школьного проекта. Моя цель - чтобы кто-то загрузил файл json и сохранил некоторые данные о нем в таблице на Mysql для дальнейшей функциональности в приложении.

Мой вопрос заключается в том, как точно вы можете передать файл JSON в PHP, а затем проанализировать его оттуда, чтобы сохранить нужные данные в БД. Я попытался отправить его с помощью Jquery fileupload, поскольку файлы json могут быть довольно большими и на стороне php я использовал функцию file_get_contents , но мне не повезло с этим.

Вот мой javascript код:

$(document).ready(function () {
        $("#submitupload").click(function(){
            var files = $("#files");
            $("#uploadedfile").fileupload({
                url: 'upload.php',
                dataType: 'json',
                autoUpload: false
            }).on('fileuploadadd', function (e, data) {
                var fileTypeAllowed = /.\.(json)$/i;
                var fileName = data.originalFiles[0]['name'];
                var fileSize = data.originalFiles[0]['size'];
                console.log(data);
                if (!fileTypeAllowed.test(fileName)){
                    $("#error").html('Only json files are allowed');
                }else
                data.submit();
            }).on('fileuploaddone', function (e , data){
                var msg = data.jqXHR.responseJSON.msg;
                $("#error").html(msg);
            }).on('fileuploadprogress', function (e,data){
                var progress = parseInt(data.loaded / data.total * 100, 10 );
                $("#progress").html("Completed: " + progress + "%");
            })
})
})

А вот PHP:

<?php
include_once ('connection.php');

if (isset($_FILES['uploadingfile'])){

    $file = $_FILES['uploadingfile'];


    $data = file_get_contents($file);

    $array = json_decode($data, true );

    foreach( $array as $row){
        $sql = "INSERT INTO locations(timestamp) VALUES ('".$row["timestampMs"]."')";
        mysqli_query($conn, $sql);
    }
    $msg = array("msg" => "times ok ");
    exit(json_encode($msg));
}

Заметил ошибку в file_get_contents () это говорит о том, что переменная $ file является массивом, а не строкой, поэтому я попытался передать переменную $ _FILES в качестве аргумента, но безуспешно.

Это правильный способ сделать это, и если да, то что мне не хватает или я должен использовать другой подход?

Спасибо за долгое чтение и ваше время заранее! Извините, если что-то из этого звучит глупо, но я новичок в PHP.

1 Ответ

1 голос
/ 26 марта 2020

$_FILES['uploadingfile'] - это массив с несколькими частями информации о загруженном файле. Поэтому вам нужно использовать:

$file = $_FILES['uploadingfile']['tmp_name'];

, чтобы получить имя файла, в котором хранятся данные.

См. Обработка загрузки файлов для получения полной информации.

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