Случайные вопросы, закреплённые за каждым пользователем 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 вопросов из БД. Как сделать так, чтобы у каждого пользователя были свои вопросы и они не менялись после обновления страницы?