@Intelix

Как найти и обновить значение в базе данных?

Есть база данных с таблицами 'users' и 'tests' связь между ними (1:M)
Так выглядит таблица 'tests'
5cf03c80b88e5942969467.png

С клиента отправляется AJAX запрос с двумя значениями "name" и "score" в php скрипт.
Задача состоит в том, чтобы на стороне php узнать есть ли в таблице "tests" передаваемое значение "name" принадлежащее именно тому "user" который авторизован. И если значение есть обновить поле "progress" на передаваемое значение "score", иначе создать новую запись в бд.

Делаю это так через RedBeanPHP:
Но здесь явно что-то не так, потому что данные не обновляются.
Никаких ответов и ошибок от сервера не приходит
Данные с AJAX передаются
<?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);
}
?>
  • Вопрос задан
  • 169 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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