[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Таймер для теста
Гость_Елена
Здравствуйте. Мне нужно сделать на сайте тестирование с ограничением по времени, т.е. после окончания времени пользователь перенаправлялся на страницу подсчета результата и в базу записывалось время прохождения теста (на случай, если тест пройден за меньшее время).
Сам скрипт теста я написала. Из базы у меня извлекается вопрос и выводится форма для ответа. Пользователь вводит ответ и нажимает кнопку ""Следующий вопрос". При этом данные из формы передаются на исходную страницу и записываются в базу. На последнем вопросе появляется кнопка "Закончить". При ее нажатии открывается новая страница, на которой выводятся результаты тестирования.
Мне осталось сделать таймер. В этом и проблема. Если поставить таймер на jаvаscript, то он после нажатия кнопки "Следующий вопрос" при обновлении страницы сбрасывается. А мне нужно, чтобы его состояние как-нибудь запоминалось и при переходе к следующему вопросу таймер не сбрасывался. И еще. По окончании тестирования время, как я уже говорила, нужно записать истекшее время в базу, и если время вышло, направить пользователя на страницу результатов.
Спасибо всем. кто поможет)



Спустя 3 минуты, 59 секунд (5.08.2009 - 14:19) Гость_Елена написал(а):
Вот скрипт тестирования
PHP
<?
{exit (
"<p>Неверный формат запроса! Проверьте URL!");}
if (isset(
$_POST['otv']))     {$otv $_POST['otv'];}
if (isset(
$_POST['num']))     {$num $_POST['num'];}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="Description" content=" ">
<meta name="Keywords" content=" ">
<title>Тесты</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<link href="style.css" rel="stylesheet" type="text/css">
</head>

<body>
<table width="100%" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" class="main_border">
  <? include("blocks/header.php"); ?>
  <tr><td><table width="100%" height="25px" cellpadding="0" cellspacing="0" bgcolor="#3B72A5">
  <td><? include("blocks/menu_st.php"); ?></td>
  </table></td></tr>
  <tr>
    <td>
      <table width="100%" height="660px" cellpadding="0" cellspacing="0">
      <? include("blocks/nav_st.php"); ?>
        <td width="66%" valign="top">   
<? 
            
if(empty($go) AND empty($next)) 
{
//1        
?>
<span class='tit'><b>Правила тестирования:</b><span>
<ol>
<li>Контрольный тест состоит из 15  вопросов с вводом правильного ответа вручную. 
<li>На прохождение теста отведена 1 попытка.
<li>Время прохождения теста ограничено (45 мин.).
<li>В конце тестирования выводится количество набранных баллов и выставляется оценка.
</ol>

<form name="form1" enctype="multipart/form-data" method="post" action="<? echo $PHP_SELF?>">
<input name="id_disc" type="hidden" id="id_disc" value="<? echo $id_disc;?>">
<input name="id_str" type="hidden" id="id_str" value="<? echo $id_str;?>">
<p>
<label>
<input name="go" type="submit" id="submit" value="Начать тестирование">
</label>
</p>
</form>
<?
}//1
else
{
//2    
$result_p mssql_query("SELECT id_st FROM Test_otv_st LEFT JOIN Test_otv ON Test_otv_st.id_test_otv=Test_otv.id_test_otv
                         WHERE id_st=$id_st AND Test_otv_st.id_test_otv=Test_otv.id_test_otv"
);
if (
mssql_num_rows($result_p) > 1
{
//3
echo "<p>Тест пройти нельзя!<br>Вы истратили все попытки.</p>";
}
//3
else
{
//4
if (empty ($next))
{
//5
$result1 mssql_query("SELECT top 1 * FROM Quest_otv LEFT JOIN Test_otv ON Quest_otv.id_test_otv=Test_otv.id_test_otv
                        WHERE id_str=$id_str AND id_q_otv NOT IN (SELECT top 0 id_q_otv FROM Quest_otv ORDER BY id_q_otv)
                        ORDER BY id_q_otv"
);
$myrow1 mssql_fetch_array($result1); 
$id=$myrow1['id_test_otv'];
$date date("d-m-Y");
/*$result00 = mssql_query ("INSERT INTO Test_otv_st (id_test_otv,id_st,cur_date) 
                            VALUES ('$id','$id_st','$date')");*/
 
$num=1;
}
//5
else
{
//6
  
$result01 mssql_query("SELECT id_totv_st,ans_st FROM Test_otv_st 
                           LEFT JOIN Test_otv ON Test_otv_st.id_test_otv=Test_otv.id_test_otv
                           WHERE id_st=$id_st AND Test_otv_st.id_test_otv=Test_otv.id_test_otv"
);
  
$myrow01 mssql_fetch_array($result01);
  
$id=$myrow01['id_totv_st'];
  
$arr=explode(" ",$myrow01['ans_st']);
  if (isset(
$otv)) $arr[$num-1]=$otv; if ($otv==""$arr[$num-1]=0;
  
$stroka=implode(" ",$arr);
  
$result02 mssql_query ("UPDATE Test_otv_st SET ans_st='$stroka' WHERE id_totv_st=$id");
  
if (
$num==3) echo "<html><head><meta http-equiv='Refresh' content='0; URL=test_k_end.php?id_disc=$id_disc&id_str=$id_str'></head></html>";
$result1 mssql_query("SELECT top 1 * FROM Quest_otv LEFT JOIN Test_otv ON Quest_otv.id_test_otv=Test_otv.id_test_otv
                        WHERE id_str=$id_str AND id_q_otv NOT IN (SELECT top $num id_q_otv FROM Quest_otv ORDER BY id_q_otv)
                        ORDER BY id_q_otv"
);
$myrow1 mssql_fetch_array($result1); 
$num++;
}
//6
if ($num<4)
{
//7
if ($num<3$knopka="Следующий вопроc"; else $knopka="Закончить";
?>
<form name="form2" enctype="multipart/form-data" method="post" action="<? echo $PHP_SELF?>">
<p>
<label><b>Вопрос: <? echo $num;?></b><br>
</label>
</p>
<p>
<label><b><? echo $myrow1['vopros'];?></b><br>
</label>
</p>
<p>
<label><b>Ответ:</b><br>
<input name="otv" type="text" id="otv" size="20">
</label>
</p>
<input name="num" type="hidden" id="num" value="<? echo $num;?>">
<input name="id_disc" type="hidden" id="id_disc" value="<? echo $id_disc;?>">
<input name="id_str" type="hidden" id="id_str" value="<? echo $id_str;?>">
<p>
<label>
<input name="next" type="submit" id="submit" value="<? echo $knopka;?>">
</label>
</p>
</form>
<?
}//7
}//4
}//2
?>     
        </td> 
        <? include("blocks/news_st.php"); ?> 
      </table>  
    </td>
  </tr>
  <? include("blocks/footer.php"); ?>
</tab



Спустя 1 час, 20 минут, 50 секунд (5.08.2009 - 15:39) twin написал(а):
Таймер в любом случае должен быть на JS, а значит выход один. запомнить время начала и корректировать таймер по этой метке. Это можно сделать кучей способов. Записать в сессию, куку, базу или файл.
Цитата
По окончании тестирования время, как я уже говорила, нужно записать истекшее время в базу, и если время вышло, направить пользователя на страницу результатов.

Если нужна запись в базе, то лучше туда писать не время окончания а наоборот. Время старта. И ориентироваться по нему.

Спустя 22 часа, 7 минут, 31 секунда (6.08.2009 - 13:47) Гость_Елена написал(а):
Спасибо. Я все сделала. Пришлось применить jаvаscript и ajax) на jаvаscript таймер работает, а с помошью ajax каждую секунду записываю показания времени в базу. Все работает. smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.