За последние 24 часа нас посетил 20141 программист и 1084 робота. Сейчас ищут 735 программистов ...

Как отключить повторное прохождение теста?

Тема в разделе "Сделайте за меня", создана пользователем Яна Литвинова, 25 авг 2022.

  1. Яна Литвинова

    Яна Литвинова Новичок

    С нами с:
    12 июн 2022
    Сообщения:
    25
    Симпатии:
    0
    Добрый день!
    Прошу помощи.
    Столкнулась с такой проблемой, когда пользователь может бесконечное количество раз может проходить тест и результаты будут обновляться.
    Мне нужно, чтобы пользователь мог пройти тест только один раз. Т.е. после прохождения теста 1 раз кнопка пройти тест перестала быть активной и выходило сообщение "Спасибо за прохождение теста".
    Подскажите, пожалуйста, уважаемые форумчане, каким спjсобом или методом на PHP это можно сделать? Заранее большое спасибо!!!
    PHP:
    1. <?php
    2.     include_once  'db.php';
    3.     session_start();
    4.     $id = $_SESSION['user']['id'];
    5.  
    6.     if (!empty($_POST['testId'])) {
    7.       $testId = (int) $_POST['testId'];
    8.     } else {
    9.       $testId = 21;
    10.     }
    11.  
    12.     if (!empty($_POST['q'])) {
    13.       $questionNum = (int) $_POST['q'];
    14.     } else {
    15.       $questionNum = 27;
    16.     }
    17.  
    18.     $questionNum++;
    19.     $questionStart = $questionNum - 1;
    20.  
    21.     $res = $db->query("SELECT count(*) AS count FROM questions");
    22.     $row = $res->fetch();
    23.     $questionCount = $row['count'] + 27;
    24.  
    25.     $showForm = 0;
    26.  
    27.  
    28.     if ($questionCount >= $questionNum) {
    29.       $showForm = 1;
    30.  
    31.         $res = $db->query("SELECT * FROM questions WHERE id = {$questionNum}");
    32.         $row = $res->fetch();
    33.         $question = $row['question'];
    34.         $questionId = $row['id'];
    35.         $testId = $row['test_id'];
    36.  
    37.         $res = $db->query("SELECT * FROM answers WHERE question_id = {$questionId}");
    38.         $answers = $res->fetchAll();
    39.  
    40.     }
    41.       if (!empty($_POST['answer_id'])) {
    42.         $answerId = (int) $_POST['answer_id'];
    43.       }
    44.  
    45.       if (!empty($answerId)) {
    46.         $res = $db->query("SELECT * FROM answers WHERE id = {$answerId}");
    47.         $row = $res->fetch();
    48.         $score = $row['score'];
    49.  
    50.         if ($testId == $_POST['testId'] and $questionCount > $questionNum) {
    51.           if (empty($_SESSION['num' . $testId])) {
    52.             $_SESSION['num' . $testId] = 0;
    53.           }
    54.           $_SESSION['num' . $testId] += $score;
    55.         } else {
    56.           $_SESSION['num' . $_POST['testId']] += $score;
    57.           $score = $_SESSION['num' . $_POST['testId']];
    58.           $db->exec("UPDATE users SET`cat" . $_POST['testId'] . "` = '$score' WHERE id = '$id'");
    59.           unset($_SESSION['num' . $_POST['testId']]);
    60.           $_SESSION['num' . $testId] = 0;
    61.           if ($questionNum >= $questionCount) {
    62.             header ('location: profile.php');
    63.             die();
    64.           }
    65.         }
    66.       }
    67. ?>
    68.  
    69. <!doctype html>
    70. <html lang="ru">
    71. <head>
    72.     <meta charset="UTF-8">
    73.     <meta name="viewport"
    74.           content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    75.     <meta http-equiv="X-UA-Compatible" content="ie=edge">
    76.     <title>Система тестирования учащихся НИШ ФМН г. Талдыкорган</title>
    77.     <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
    78.     <link rel="stylesheet" href="css/app.css">
    79. </head>
    80. <body>
    81.  
    82.     <div class="container">
    83.  
    84.         <?php if ($showForm) { ?>
    85.             <form action="test.php?id=<?php echo $testId; ?>" method="post">
    86.                 <input type="hidden" name="testId" value="<?php echo $testId ?? 1; ?>">
    87.                 <input type="hidden" name="q" value="<?php echo $questionNum; ?>">
    88.                 <div class="row justify-content-center">
    89.                     <div class="col-md-6">
    90.                         <div class="text-center mt-5">
    91.                         <!-- <p>Вопрос <?php echo $questionNum - 27 . ' из ' . $questionCount - 27; ?></p> -->
    92.                         </div>
    93.                         <div class="card mt-3">
    94.                             <div class="card-header">
    95.                                 <h3><?php echo $question; ?></h3>
    96.                             </div>
    97.  
    98.                             <div class="card-body">
    99.                                 <?php foreach ($answers AS $answer) { ?>
    100.                                     <div>
    101.                                         <label for="answ_<?php echo $questionNum - 27 . '_' . $answer['id']; ?>">
    102.                                           <input
    103.                                             type="radio"
    104.                                             name="answer_id"
    105.                                             required value="<?php echo $answer['id']; ?>"
    106.                                             id="answ_<?php echo $questionNum - 27 . '_' . $answer['id']; ?>"
    107.                                             >
    108.                                             <?php echo $answer['answer']; ?>
    109.                                         </label>
    110.                                     </div>
    111.                                 <?php } ?>
    112.                             </div>
    113.  
    114.                         </div>
    115.                         <div class="text-center mt-3">
    116.                             <?php if ($questionCount == $questionNum) { ?>
    117.                                 <button type="submit" class="btn btn-success btn-lg">Получить результат</button>
    118.                             <?php } else { ?>
    119.                                 <button type="submit" class="btn btn-warning btn-lg">Дальше</button>
    120.                             <?php } ?>
    121.                         </div>
    122.                     </div>
    123.                 </div>
    124.             </form>
    125.         <?php } ?>
    126.     </div>
    127.  
    128.  
    129. </body>
    130. </html>
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.817
    Симпатии:
    735
    Адрес:
    Татарстан
    Перед показом теста, проверяете нет ли уже результатов по нему у данного пользователя. Если уже есть, значит проходил шлете его куда надо, показываете то что хотите....
     
    Яна Литвинова нравится это.