Добрый день! Прошу помощи. Столкнулась с такой проблемой, когда пользователь может бесконечное количество раз может проходить тест и результаты будут обновляться. Мне нужно, чтобы пользователь мог пройти тест только один раз. Т.е. после прохождения теста 1 раз кнопка пройти тест перестала быть активной и выходило сообщение "Спасибо за прохождение теста". Подскажите, пожалуйста, уважаемые форумчане, каким спjсобом или методом на PHP это можно сделать? Заранее большое спасибо!!! PHP: <?php include_once 'db.php'; session_start(); $id = $_SESSION['user']['id']; if (!empty($_POST['testId'])) { $testId = (int) $_POST['testId']; } else { $testId = 21; } if (!empty($_POST['q'])) { $questionNum = (int) $_POST['q']; } else { $questionNum = 27; } $questionNum++; $questionStart = $questionNum - 1; $res = $db->query("SELECT count(*) AS count FROM questions"); $row = $res->fetch(); $questionCount = $row['count'] + 27; $showForm = 0; if ($questionCount >= $questionNum) { $showForm = 1; $res = $db->query("SELECT * FROM questions WHERE id = {$questionNum}"); $row = $res->fetch(); $question = $row['question']; $questionId = $row['id']; $testId = $row['test_id']; $res = $db->query("SELECT * FROM answers WHERE question_id = {$questionId}"); $answers = $res->fetchAll(); } if (!empty($_POST['answer_id'])) { $answerId = (int) $_POST['answer_id']; } if (!empty($answerId)) { $res = $db->query("SELECT * FROM answers WHERE id = {$answerId}"); $row = $res->fetch(); $score = $row['score']; if ($testId == $_POST['testId'] and $questionCount > $questionNum) { if (empty($_SESSION['num' . $testId])) { $_SESSION['num' . $testId] = 0; } $_SESSION['num' . $testId] += $score; } else { $_SESSION['num' . $_POST['testId']] += $score; $score = $_SESSION['num' . $_POST['testId']]; $db->exec("UPDATE users SET`cat" . $_POST['testId'] . "` = '$score' WHERE id = '$id'"); unset($_SESSION['num' . $_POST['testId']]); $_SESSION['num' . $testId] = 0; if ($questionNum >= $questionCount) { header ('location: profile.php'); die(); } } } ?> <!doctype html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Система тестирования учащихся НИШ ФМН г. Талдыкорган</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> <link rel="stylesheet" href="css/app.css"> </head> <body> <div class="container"> <?php if ($showForm) { ?> <form action="test.php?id=<?php echo $testId; ?>" method="post"> <input type="hidden" name="testId" value="<?php echo $testId ?? 1; ?>"> <input type="hidden" name="q" value="<?php echo $questionNum; ?>"> <div class="row justify-content-center"> <div class="col-md-6"> <div class="text-center mt-5"> <!-- <p>Вопрос <?php echo $questionNum - 27 . ' из ' . $questionCount - 27; ?></p> --> </div> <div class="card mt-3"> <div class="card-header"> <h3><?php echo $question; ?></h3> </div> <div class="card-body"> <?php foreach ($answers AS $answer) { ?> <div> <label for="answ_<?php echo $questionNum - 27 . '_' . $answer['id']; ?>"> <input type="radio" name="answer_id" required value="<?php echo $answer['id']; ?>" id="answ_<?php echo $questionNum - 27 . '_' . $answer['id']; ?>" > <?php echo $answer['answer']; ?> </label> </div> <?php } ?> </div> </div> <div class="text-center mt-3"> <?php if ($questionCount == $questionNum) { ?> <button type="submit" class="btn btn-success btn-lg">Получить результат</button> <?php } else { ?> <button type="submit" class="btn btn-warning btn-lg">Дальше</button> <?php } ?> </div> </div> </div> </form> <?php } ?> </div> </body> </html>
Перед показом теста, проверяете нет ли уже результатов по нему у данного пользователя. Если уже есть, значит проходил шлете его куда надо, показываете то что хотите....