2016-12-02 1 views
0

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

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

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

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

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

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

Update Вот мой код

<?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> 
+1

можете ли вы разместить код, пожалуйста, –

+1

Добро пожаловать в переполнение стека! Сначала вы можете взять [тур] и узнать [спросить] хороший вопрос и создать [mcve]. Это облегчает нам помощь. – Katie

+0

Я обновил свой вопрос и добавил код. взгляни, пожалуйста. – user3231665

ответ

1

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

0

на первой загрузке страницы сохраните все вопросы ID и идентификатор пользователя соотношение в Databse как

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

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

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

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

+0

Я попробую этот подход. Спасибо – user3231665

+0

приветствую пользоваться кодированием .... –

Смежные вопросы