Случайные вопросы, закреплённые за каждым пользователем PHP. Работа с сессиями

Так выглядит index.php, где происходит регистрация пользователя

<!doctype html>
<html lang="ru">
<head>
  <meta charset="utf-8" />
  <title>php</title>
  <link rel="stylesheet" href="style3.css" />
</head>
<body>
    <h3>Регистрация</h3>
<form action="#" method="post">
    <label>Логин</label>
    <input type="login" name="login" required >
    <label>Пароль</label>
    <input type="password" name="pass1" required >
    <label>Повторите пароль</label>
    <input type="password" name="pass2" required >
    <button  type="submit" name="reg">Регистрация</button>
    <a href="login.php">Уже зарегистрированы?</a>
</form>
<?
    session_start();
    include ('bd.php');
   if (isset($_POST['reg'])) {
    $login = $_POST['login'];
    $password1 = $_POST['pass1'];
    $password2 = $_POST['pass2'];

    if ($password1 != $password2) {
        $error = "Пароли не совпадают!";
    }

    if (!$login || !$password1 || !$password2) {
        $error = "Вы ввели некорректные значения!";
    }

    $query_check = "SELECT * FROM users WHERE login = '$login'";
    $result_check = mysqli_query($link, $query_check);

    if (mysqli_num_rows($result_check) > 0) {
        $error = "Пользователь с таким логином уже существует!";
    }

    if (!$error) {
        session_unset(); 
        $_SESSION['username'] = $login; 
        $query = "INSERT INTO `users` (`id`, `login`, `password`, `admin`, `points`) VALUES (NULL, '$login', '$password1', 0, 0);";
        mysqli_query($link, $query);
        echo "Вы успешно создали пользователя!";
        header("Location: test.php");
        exit();
    } else {
        echo $error;
    }
    
}
?>
</body>
</html>

test.php:

<!DOCTYPE html>
<html lang="ru">
<head>
  <meta charset="utf-8" />
  <title>Тестирование</title>
  <link rel="stylesheet" href="style3.css" />
</head>
<body>
<?php
    session_start();
    include('bd.php');
    
    $max_allowed_time = 600;
    
    if (isset($_SESSION['username'])) {
        $username = $_SESSION['username'];
        if (!isset($_SESSION[$username]['test_start_time'])) {
            $_SESSION[$username]['test_start_time'] = time();
            $_SESSION[$username]['selected_questions'] = null; 
        }
        echo "<a>Здравствуйте, $username</a><br>";
    } else {
        header("Location: index.php");
        exit();
    }
    
    $dateAndTime = date("d.m.Y H:i");
    if ($_SESSION[$username]['selected_questions'] === null) {
        $query = "SELECT * FROM questions ORDER BY RAND() LIMIT 5";
        $result = mysqli_query($link, $query);
        $elapsed_time = 0;
        $selected_questions = array();
        while ($row = mysqli_fetch_assoc($result)) {
            $selected_questions[] = $row;
        }
    
        $_SESSION[$username]['selected_questions'] = $selected_questions;
        $_SESSION[$username]['test_start_time'] = time();
        echo "<a>Начало теста $dateAndTime, максимальное время теста 10 минут</a>";
    }
?>

<form action="" method="post" class="form-container">
    <?php
    if (isset($_SESSION[$username]['selected_questions'])) {
        $selected_questions = $_SESSION[$username]['selected_questions'];
    
        foreach ($selected_questions as $row) {
            $question_id = $row['id'];
            $question = $row['question'];
            $answer1 = $row['answer1'];
            $answer2 = $row['answer2'];
            $answer3 = $row['answer3'];
    
            echo "<p><label for='question_$question_id'>$question</label></p>";
            echo "<input type='radio' id='question_$question_id' name='question_$question_id' value='1'>$answer1<br>";
            echo "<input type='radio' id='question_$question_id' name='question_$question_id' value='2'>$answer2<br>";
            echo "<input type='radio' id='question_$question_id' name='question_$question_id' value='3'>$answer3<br>";
        }
    }
    ?>
    <button type="submit" name="check_answers">Проверить ответы</button>
    <?php
    if (isset($_POST['check_answers'])) {
        $test_start_time = $_SESSION[$username]['test_start_time'];
        $test_end_time = time();
        $elapsed_time = $test_end_time - $test_start_time;
        echo "Время, затраченное на тест: " . gmdate("H:i:s", $elapsed_time)."<br>";
        $total_score = 0;
  
        $query = "SELECT * FROM questions";
        $result = mysqli_query($link, $query);
  
        while ($row = mysqli_fetch_assoc($result)) {
            $question_id = $row['id'];
            $correct_answer = $row['correct_answer']; 
  
            if (isset($_POST["question_$question_id"])) {
                $user_answer = $_POST["question_$question_id"];
  
                if ($user_answer == $correct_answer) {
                    $total_score++;
                }
            }
        }
        if ($elapsed_time > $max_allowed_time) {
            echo "Время прохождения теста превысило допустимый лимит. Результаты аннулированы.<br>";
            $total_score = 0; 
        }
        $update_query = "UPDATE users SET points = $total_score WHERE login = '$username'";
        mysqli_query($link, $update_query);
  
        echo "Вы набрали $total_score из возможных 5 баллов.";
  
        $_SESSION['points'] = $_SESSION['points'] + $total_score;
        $_SESSION[$username]['test_start_time'] = time();
        $elapsed_time = 0;
    }
    ?>
</form>
<a href="index.php">Вернуться на главную</a>
</body>
</html>

Каждому пользователю должны быть случайно выбраны 5 вопросов из БД. Как сделать так, чтобы у каждого пользователя были свои вопросы и они не менялись после обновления страницы?


Ответы (0 шт):