Сохраняйте данные ответы время от времени в онлайн-системе экзаменов.

Я занимаюсь разработкой системы онлайн-экзаменов с php. Я разработал тип вопроса для банка вопросов, чтобы на экзамене каждый студент получал случайные вопросы из банка вопросов. По сути, это означает, что если у меня есть 100 вопросов, то к экзамену я могу выбрать 60 вопросов для этой статьи. А также они вытащили случайно.

Проблема в том, что когда пользователь обновляет страницу, он каждый раз получает новые случайные вопросы. Я пытался хранить вопросы в HTML5 localStorage вместе с данными ответами. Так что надеемся загружать из локального хранилища, а не запрашивать из БД при каждом обновлении страницы.

Затем я понял, что php на стороне сервера, и когда происходит обновление страницы, я не могу загрузить из localStorage в скрипт php. В некоторых статьях сказано использовать ajax. Но я не могу понять, как загрузить данные на ту же страницу, когда нажата кнопка обновления или F5. (Да я пробовал с onbeforeunload)

Вот что я сделал как решение. Я сохранил загруженные вопросы в $ _SESSION и получил доступ к ним, чтобы сохранить те же вопросы в обновлении.

Проблемы у меня в настоящее время возникают хотя это работает для хранения вопросов, это не помогает сохранить уже отмеченные ответы, и если пользователь случайно закрыл окно, он не может продолжить с того места, где остановился.

Есть идеи? Если вы хотите посмотреть на мой код, пожалуйста, дайте мне знать.
Спасибо.

Обновить Вот мой код

    <?php if($_GET['exam_id']!="")
{
$e_id=decrypt_string($_GET['exam_id']);
$query_p_exam=mysqli_fetch_array(mysqli_query($conn,"select * from exam where e_id='".$e_id."'"));
$category_id=$query_p_exam['category_id'];
$subcategory_id=$query_p_exam['subcategory_id'];
$subject_id=$query_p_exam['subject_id'];
$exam_name=$query_p_exam['exam_name'];
$exam_duration=$query_p_exam['exam_duration'];
$neg_mark_status=$query_p_exam['neg_mark_status'];
$negative_marks=$query_p_exam['negative_marks'];
$question_limit = $query_p_exam['question_limit'];
//echo $question_limit;
}
?>
<div class="main-content">
<br>
<div class="container-fluid padded">
<div class="container-fluid padded"><div class="row-fluid">
<div class="span8">
<div class="box">
<div class="box-header">
<span class="title"><i class="icon-reorder"></i>&nbsp;Questions</span>
</div>
<div class="box-content scrollable" style="max-height: 500px; overflow-y: auto">
<div class="box-section news with-icons">
<form method='post' id='quiz_form' action="main_result.php">
<table style="width:100%;vertical-align:top"  class="table table-normal">
<tr>
<td style="vertical-align:top">
<?php
if($_SESSION["rows"]){

$tempArray = $_SESSION["rows"];
//var_dump($tempArray);

$total_querstion= $question_limit;
$timeduration=60000*$query_exam_Name['duration'];
$i=1;
$m_e_id=1;

foreach($tempArray as $result){
$rows[] = $result;

?>

<!-- DISPLAY QUESTION BEGINS -->
<div <?php if($i==1){}else{echo 'style="display: none;"';}?> id="<?php echo $m_e_id;?>_<?php echo $i;?>" class="display_question">
<div class="bradcome-menu qu-pa">
<div class="col-md-6"> <span class="question"> Question No. <?php echo $i;?></span></div>
</div>
<h4 class="quction"><p><?php echo $result['question'];?></p></h4>

<?php if($result['typeofquestion']=='Single'){?>
<table class="answeers" border="0" width="100%">
<tbody>
<tr>
<td style="width:10px"><input name="radio_<?php echo $result['q_id'];?>" value="A" id="" type="radio"></td>
<td><?php echo $result['option_a'];?>                       </td>
</tr>
<tr>
<td>
<input name="radio_<?php echo $result['q_id'];?>" value="B" id="" type="radio"></td><td>
<?php echo $result['option_b'];?>                        </td>
</tr>
<tr>
<td>
<input name="radio_<?php echo $result['q_id'];?>" value="C" id="" type="radio"></td><td>
<?php echo $result['option_c'];?>                        </td>
</tr>
<tr>
<td>
<input name="radio_<?php echo $result['q_id'];?>" value="D" id="" type="radio"></td><td>
<?php echo $result['option_d'];?>                        </td>
</tr>
</tbody>
</table>
<?php }
if($result['typeofquestion']=='Multiple'){?>
<table class="answeers" border="0" width="100%">
<tbody><tr>
<td style="width:10px">
<input name="checkbox_A_<?php echo $result['q_id'];?>" value="A" id="" type="checkbox"></td><td>
<?php echo $result['option_a'];?>                        </td>
</tr>
<tr>
<td>
<input name="checkbox_B_<?php echo $result['q_id'];?>" value="B" id="" type="checkbox"></td><td>
<?php echo $result['option_b'];?>                       </td>
</tr>
<tr>
<td>
<input name="checkbox_C_<?php echo $result['q_id'];?>" value="C" id="" type="checkbox"></td><td>
<?php echo $result['option_c'];?>                      </td>
</tr>
<tr>
<td>
<input name="checkbox_D_<?php echo $result['q_id'];?>" value="D" id="" type="checkbox"></td><td>
<?php echo $result['option_d'];?>                       </td>
</tr>
</tbody>
</table>
<?php }?>
</div>

<!-- DISPLAY QUESTION ENDS -->
<?php $i++;}
}else{

$query_pag_data = mysqli_query($conn,"SELECT * from question where e_id='".$e_id."' and  question_status=1 and c_id='".$category_id."' and s_c_id='".$subcategory_id."' order by rand() LIMIT ".$question_limit);$total_querstion= $question_limit;
$timeduration=60000*$query_exam_Name['duration'];
$i=1;
$m_e_id=1;
while($result=mysqli_fetch_array($query_pag_data)){
$rows[] = $result;
?>

<!-- DISPLAY QUESTION BEGINS -->
<!-- same code -->
<!-- DISPLAY QUESTION ENDS -->

<?php   $i++;
$_SESSION["rows"] = $rows;
}

}

?>

<?php
$json = json_encode($rows);
$_SESSION ['json'] = $json;
?>
</td>
</tr>
<tr>
<td>
<table>
<tr>
<td><div id="prev" class="btn btn-gray "><?php echo constant('TI_PREVIOUS_BUTTON');?></div></td>
<td><div id="mnext" class="btn btn-gray"><?php echo constant('TI_MARK_FOR_REVIEW_BUTTON');?></div></td>
<td><div id="next" class="btn btn-gray"><?php echo constant('TI_NEXT_BUTTON');?></div></td>
<td><div id="clearAnswer" class="btn btn-gray"><?php echo constant('TI_CLEAR_ANSWER_BUTTON');?></div></td>
<td><div style="float:right"><input id="finish" class="btn btn-green" value="Finish" name="Finish" onclick="return confirm('<?php echo constant('TI_SUBMITALERT_MESSAGE')?>')" type="submit"></div></td>
</tr>
</table>
</td>
</tr>
</table>
<input type="hidden" name="exam_id" value="<?php echo $_GET['exam_id'];?>">
</form>
</div>
</div>
</div>
</div>

0

Решение

Да, шаг, который вы выполнили, используя сеанс, сработает, и в отношении уже отмеченных ответов вы должны обновить базу данных и получить новый набор.

1

Другие решения

при загрузке первой страницы сохраните все идентификаторы вопросов и идентификаторов пользователей в базе данных, например

qid uid ans
1    1   update
1    5   update
2    5   update

таким образом, все очереди сначала хранятся с идентификатором пользователя в случайном порядке, и при каждом ответе обновляйте эту запись, я думаю, что это легко, потому что, если пользователь закрывает окно или выключает свет, вычислять его легко, чтобы определить, где он оставлен

Например. если пользователь ответил на 3 вопроса, то вы можете определить, у кого нет ответа, тогда выбрать только те вопросы или любую другую логику, которую вы хотите применить, это может быть легко для вас

поэтому база данных — лучшее решение, потому что, если вы используете, вы не получаете значения, если вы меняете браузер или существует какая-либо другая проблема, то она не будет работать.

0

По вопросам рекламы [email protected]