Здравствуйте. Мне нужно сделать на сайте тестирование с ограничением по времени, т.е. после окончания времени пользователь перенаправлялся на страницу подсчета результата и в базу записывалось время прохождения теста (на случай, если тест пройден за меньшее время).
Сам
скрипт теста я написала. Из базы у меня извлекается вопрос и выводится форма для ответа. Пользователь вводит ответ и нажимает кнопку ""Следующий вопрос". При этом данные из формы передаются на исходную страницу и записываются в базу. На последнем вопросе появляется кнопка "Закончить". При ее нажатии открывается новая страница, на которой выводятся результаты тестирования.
Мне осталось сделать таймер. В этом и проблема. Если поставить таймер на 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 каждую секунду записываю показания времени в базу. Все
работает.