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

116
16 января 2021, 00:00

Логика такая: Пользователь проходит тест на стороне клиента, в результате прохождения которого зарабатывает "score". В конце, с помощью AJAX запроса передаю в php скрипт значение "score" и название проходимого теста "name" (данные передаются)

На стороне php нужно совершать такие действия:

  1. Загрузить данные о пользователе чья сейчас сессия

  2. Проверить, есть ли уже значение "name" в связанной с user (1:M) таблицей "tests"

  3. Если есть, то после нескольких условий изменить данные в нескольких полях

  4. Если нет, создать новую запись

Новая запись создается, но только первый раз, если ни один другой user еще не создавал ее, все остальное не работает (Никаких ответов и ошибок от сервера не приходит)

Что я написал не так?

php скрипт:

<?php
require "db.php";
if (isset($_SESSION['logged_user'])) {
  // Получаем id users чья сессия
  $userid = $_SESSION['logged_user']->id;
  // Загружаем данные об этом user
  $user = R::load( 'users', $userid );
  // Дальше я не уверен в том правильно ли я сделал выборку
  // ищем запись $_POST['name'] в поле "name" в таблице "tests" 
  $findTest = R::findOne('tests', 'name = ?', array($_POST['name']));
  //Если такая запись есть
  if ($findTest) {
    //В цикле, который по идее перебирает именно данные юзера с id = $_SESSION['logged_user']
    foreach( $user->ownTestsList as $test ) {
      //Если найдено поле = $_POST['name']
      if ($test->name == $_POST['name']) {
        //При этом, если значение progress  в базе < $_POST['score']
        if ($test->progress < $_POST['score']) {
          //То записываем новое значение в progress
          $test->progress = $_POST['score'];
          //И записываем новое значение в time 
          $test->time = strtotime("now");
          //Записываем новые данные в бд к тому самому юзеру, чье id = $_SESSION['logged_user']
          $user->ownTestsList[] = $test;
        }
      }
      break;
    }
  }
  //Если запись не найдена $findTest
  else {
    //Создаем новое поле в таблице "tests"
    $test = R::dispense('tests');
    $test->name = $_POST['name'];
    $test->progress = $_POST['score'];
    $test->time = strtotime("now");
    $user->ownTestsList[] = $test;
  }
  //Сохраняем данные
  R::store($user);
}
?>
READ ALSO
Не работает форма обратной связи на beget

Не работает форма обратной связи на beget

Не работает форма обратной связи (не приходят сообщения на почту), хотя сообщения на локальном сервере отправляетКод в форме html:

110
Можно ли как-то стандартными средствами java 1.8 создать на основе старой коллекции новую коллекцию, но с другим типом элементов не через цикл?

Можно ли как-то стандартными средствами java 1.8 создать на основе старой коллекции новую коллекцию, но с другим типом элементов не через цикл?

Можно ли стандартными средствами java 18 создать на основе старой коллекции новую коллекцию элементов, но с другим типом элементов не через...

156
Java код выполняется не последовательно

Java код выполняется не последовательно

Такая проблема: вызываются две функции (одна идет за другой), но первой выполняется вторая, что делает программу не юзабельной

133
Чтение таблиц из pdf java

Чтение таблиц из pdf java

Мне нужно прочитать вот этот документПытался сделать это с помощью pdfbox:

121