Как загрузить и выгрузить массив из бд?

117
19 декабря 2020, 06:20

У меня в js коде формируется массив dataArr вида [0,4,5,4,7,4,5,27]

Как мне отправить его в бд, а потом забрать от туда в прежнем виде? Пытаюсь делать так:

AJAX:

$(document).ready(function(){
      var lessonProgress = window.localStorage.getItem('dataArr'); //console.log = 0,2,,,,,,,,,,,,,,
      var data = JSON.stringify(lessonProgress); //console.log = "0,2,,,,,,,,,,,,,,"
      $.ajax({
        type: "POST",
        url: "../../php/setData.php",
        data: data,
        dataType: 'json',
      })
  });

PHP (setData.php):

<?php
require "db.php";
$data = $_POST;
if (isset($_SESSION['logged_user'])) {
  // Получаем id юзера чья сессия
  $userid = $_SESSION['logged_user']->id;
  // Загружаем данные об этом юзере
  $user = R::load( 'users', $userid );
  //Загружаем таблицу courses юзера
  $course = R::load( 'courses', $userid );
  $course->lessonProgress = json_encode($data); //В бд появляется {"\"0,2,,,,,,,,,,,,,,\"": ""}
  $user->ownCourseList[] = $course;
  R::store($user);
}
?>

Пытаюсь получить обратно

AJAX:

$(document).ready(function(){
    $.ajax({
      type:'POST',
      url: 'php/getData.php',
      data: false,
      dataType: 'json',
      success: function(data){
          alert(data);
      }
    });
  });

PHP (getData.php):

<?php
require "db.php";
header('Content-Type: application/json');
if (isset($_SESSION['logged_user'])) {
  // Получаем id users чья ссесия
  $userid = $_SESSION['logged_user']->id;
  // Загружаем данные об этом user
  $user = R::Load('users', $userid);
  //подгружаем дарные с таблицы Courses
  $course = R::load('courses', $userid);
  $lessonProgress = $course->lesson_progress;
}
echo json_decode($lessonProgress);
?>

В этом случае ответ от сервера:

SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data

Answer 1

Используйте json_encode и json_decode, т.е. при записи значения в БД - Вы должны сериализовать массив в строку, а при выборке из БД - десериализовать.

$course->lessonProgress = json_encode($data);

Как альтернатива, если значения содержат только цифры, то можно просто произвести конкатенацию элементов массива в строку с помощью join и разделить обратно с помощью str_split:

// "0,4,5,4,7,4,5,27"
$course->lessonProgress = join(",", $data);

Таким образом иногда поступают, когда значения (в Вашем случае номера уроков) являются первичными ключами какой-либо таблицы. После этого при выборе всех значений по их Id можно будет использовать IN оператор.

READ ALSO
Печать на термопринтере

Печать на термопринтере

У меня есть принтер jp-5890kЯ печатаю через этот плагин - ссылка

121
Ищу библиотеку для работы с json в которой можно обращаться к элементам с помощью []

Ищу библиотеку для работы с json в которой можно обращаться к элементам с помощью []

Существует ли библиотека JSON, в которой можно обращаться к элементам с помощью []

131
Проблема при докеде Base64

Проблема при докеде Base64

На выходе получаю ???????

120
Activity не запускается (проблема с Extras)

Activity не запускается (проблема с Extras)

При запуске Activity вылетает ошибка и приложение закрываетсяРаньше она запускалась, но перестала после того как в классе (который я передаю...

120