Начал писать скрипт тестирования, но до конца не понимаю механизма как его написать!
Я только представляю как он должен выглядеть:
1)-- > Сначала выводится название тестов!
2)-- > Затем пользователь выбирает тест для прохождения!
3)-- > Скрипт выводит по очереди вопросы, скажем всего 10
3)-- > По окончанию теста выдается результат (оценка)
ТЕСТЫ - ВОПРОСЫ - ОТВЕТЫ хранятся в базе
Вот скрипт
Код
1. <?
2. include "../config.php";
3. // функция вывода всех тестов
4. function TestList()
5. {
6. // разбивае на страницы
7. $per_page=pages;
8. if (isset($_GET['list'])) $list=($_GET['list']-1); else $list=0;
9. $start=abs($list*$per_page);
10. // запрос на выборку из базы
11. $sql="select * from test ORDER BY id_test LIMIT $start,$per_page";
12. $result=db($sql);
13. // выводим в таблицу
14. echo "<br><br><center><font class='content'><b>Выбирите тест</b></font></center><br>";
15. echo "<table width='70%' border='0' cellspacing='1' cellpadding='4' align='center' bgcolor='#336699'><tr>";
16. echo "<td align='center'>№</td>";
17. echo "<td align='center'>Тесты</td></tr>";
18. $bgr='1';
19. // заганяем запрос в цикл для вывода тестов
20. while($row=mysql_fetch_array($result))
21. {
22. if($bgr==1)
23. {
24. $bgcolor='#F5F5F5';
25. $bgr=0;
26. }
27. else
28. {
29. $bgcolor='#FFFFFF';
30. $bgr=1;
31. }
32. // название теста выглядит как ссылка
33. echo "<tr bgcolor='$bgcolor' onMouseOut=this.style.backgroundColor='$bgcolor' onMouseOver=this.style.backgroundColor='#BED9FB'>";
34. echo "<td align='center'>".$row['id_test']."<input type='hidden' value='".$row['id_test']."'></td>";
35. echo "<td align='center'><a href='".$_SERVER['PHP_SELF']."?page1-for-3.php&num=1&id_test=".$row['id_test']."&flag=1'>".$row['name_test']."</a>";
36. echo "<input type='hidden' name='name_test' value='".$row['name_test']."'></td>";
37. }
38. // конец цикла
39. //закрываем форму и таблицу
40. echo "</form></tr></table><br><center>";
41. // выводим ссылки для № страниц
42. $sql=("SELECT count(*) FROM test");
43. $result=db($sql);
44. $row=mysql_fetch_row($result);
45. $total_rows=$row[0];
46. $num_pages=ceil($total_rows/$per_page);
47. for($i=1;$i<=$num_pages;$i++) {
48. if ($i-1 == $list) {
49.
50. echo $i." ";
51. } else {
52. echo '<a href="'.$_SERVER['PHP_SELF'].'?page1-for-3.php&list='.$i.'">'.$i."</a> ";
53. }
54. }
55. }
56.
57.
58. //Функция для прохождения тестов пользователем
59.
60. function TestingUsers ()
61. {
62. // запрос на вывод вопроса согластно названия теста
63. $sql=("select * from vopros,test where vopros.id_test='".$_GET['id_test']."' and vopros.id_test=test.id_test LIMIT 1");
64. $result=db($sql);
65.
66. $row=mysql_fetch_array($result);
67. // выводим ВОПРОС
68. echo "<b class='red'>".$row['vopr']."</b>";
69.
70. // Табличка с ответами на вопрос
71.
72.
73. echo "<br><br>";
74. echo "<table width='50%' border='0' cellspacing='1' cellpadding='4' align='center' bgcolor='#336699'><tr>";
75. echo "<td align='center'>№</td>";
76. echo "<td align='center'>Вариант ответа</td>";
77. echo "<td align='center'>Ответ</td></tr>";
78.
79.
80. //форма || Почему то когда ставлю метот GET данные в массив не передаются
81. echo "<form action='".$_SERVER['PHP_SELF']."?flag=1&id_test=".$_GET['id_test']."&id_vopros=".$_GET['id_vopros']."' method='POST'>";
82. echo "<input type='hidden' name='id_vopros' value='".$row['id_vopros']."'>";
83. echo "<input type='hidden' name='id_test' value='".$_GET['id_test']."'>";
84.
85. $bgr='1';
86.
87.
88. // зарос на вывод ответов для вопроса
89. $sql=("select * from vopros,otvet where vopros.id_vopros='".$row['id_vopros']."' and vopros.id_vopros=otvet.id_vopros");
90. $result=db($sql);
91. // загоняем ответы в цикл
92. while($row=mysql_fetch_array($result)){
93.
94. if($bgr==1)
95. {
96. $bgcolor='#F5F5F5';
97. $bgr=0;
98. }
99. else
100. {
101. $bgcolor='#FFFFFF';
102. $bgr=1;
103. }
104.
105. // выводим ответы
106. echo "<tr bgcolor='$bgcolor' onMouseOut=this.style.backgroundColor='$bgcolor' onMouseOver=this.style.backgroundColor='#BED9FB'>";
107. echo "<td align='center'>".$row['id_otvet']."</td>";
108. echo "<td align='center'>".$row['otvet']."</td>";
109. echo "<td align='center'><input type='checkbox' name='' value='1'></td>";
110. }
111. // кнопка SUBMIT Smile
112. echo "</tr><tr>";
113. echo "<td align='center' bgcolor='#FFFFD0'><b class='red'>Вопрос №</b></td>";
114. echo "<td align='center' bgcolor='#FFFFD0'><input type='submit' value='Ответить'></td>";
115. echo "<td align='center' bgcolor='#FFFFD0'><b class='red'>".$_GET['num']."</b></td>";
116. echo "</form></tr></table><br><center>";
117.
118. }
119. // выбираем функцию
120.
121. if ($_GET['flag']>0)
122. {
123. TestingUsers();
124. }
125. else
126. {
127. TestList();
128. }
129.
130.
131.
132. ?>
2. include "../config.php";
3. // функция вывода всех тестов
4. function TestList()
5. {
6. // разбивае на страницы
7. $per_page=pages;
8. if (isset($_GET['list'])) $list=($_GET['list']-1); else $list=0;
9. $start=abs($list*$per_page);
10. // запрос на выборку из базы
11. $sql="select * from test ORDER BY id_test LIMIT $start,$per_page";
12. $result=db($sql);
13. // выводим в таблицу
14. echo "<br><br><center><font class='content'><b>Выбирите тест</b></font></center><br>";
15. echo "<table width='70%' border='0' cellspacing='1' cellpadding='4' align='center' bgcolor='#336699'><tr>";
16. echo "<td align='center'>№</td>";
17. echo "<td align='center'>Тесты</td></tr>";
18. $bgr='1';
19. // заганяем запрос в цикл для вывода тестов
20. while($row=mysql_fetch_array($result))
21. {
22. if($bgr==1)
23. {
24. $bgcolor='#F5F5F5';
25. $bgr=0;
26. }
27. else
28. {
29. $bgcolor='#FFFFFF';
30. $bgr=1;
31. }
32. // название теста выглядит как ссылка
33. echo "<tr bgcolor='$bgcolor' onMouseOut=this.style.backgroundColor='$bgcolor' onMouseOver=this.style.backgroundColor='#BED9FB'>";
34. echo "<td align='center'>".$row['id_test']."<input type='hidden' value='".$row['id_test']."'></td>";
35. echo "<td align='center'><a href='".$_SERVER['PHP_SELF']."?page1-for-3.php&num=1&id_test=".$row['id_test']."&flag=1'>".$row['name_test']."</a>";
36. echo "<input type='hidden' name='name_test' value='".$row['name_test']."'></td>";
37. }
38. // конец цикла
39. //закрываем форму и таблицу
40. echo "</form></tr></table><br><center>";
41. // выводим ссылки для № страниц
42. $sql=("SELECT count(*) FROM test");
43. $result=db($sql);
44. $row=mysql_fetch_row($result);
45. $total_rows=$row[0];
46. $num_pages=ceil($total_rows/$per_page);
47. for($i=1;$i<=$num_pages;$i++) {
48. if ($i-1 == $list) {
49.
50. echo $i." ";
51. } else {
52. echo '<a href="'.$_SERVER['PHP_SELF'].'?page1-for-3.php&list='.$i.'">'.$i."</a> ";
53. }
54. }
55. }
56.
57.
58. //Функция для прохождения тестов пользователем
59.
60. function TestingUsers ()
61. {
62. // запрос на вывод вопроса согластно названия теста
63. $sql=("select * from vopros,test where vopros.id_test='".$_GET['id_test']."' and vopros.id_test=test.id_test LIMIT 1");
64. $result=db($sql);
65.
66. $row=mysql_fetch_array($result);
67. // выводим ВОПРОС
68. echo "<b class='red'>".$row['vopr']."</b>";
69.
70. // Табличка с ответами на вопрос
71.
72.
73. echo "<br><br>";
74. echo "<table width='50%' border='0' cellspacing='1' cellpadding='4' align='center' bgcolor='#336699'><tr>";
75. echo "<td align='center'>№</td>";
76. echo "<td align='center'>Вариант ответа</td>";
77. echo "<td align='center'>Ответ</td></tr>";
78.
79.
80. //форма || Почему то когда ставлю метот GET данные в массив не передаются
81. echo "<form action='".$_SERVER['PHP_SELF']."?flag=1&id_test=".$_GET['id_test']."&id_vopros=".$_GET['id_vopros']."' method='POST'>";
82. echo "<input type='hidden' name='id_vopros' value='".$row['id_vopros']."'>";
83. echo "<input type='hidden' name='id_test' value='".$_GET['id_test']."'>";
84.
85. $bgr='1';
86.
87.
88. // зарос на вывод ответов для вопроса
89. $sql=("select * from vopros,otvet where vopros.id_vopros='".$row['id_vopros']."' and vopros.id_vopros=otvet.id_vopros");
90. $result=db($sql);
91. // загоняем ответы в цикл
92. while($row=mysql_fetch_array($result)){
93.
94. if($bgr==1)
95. {
96. $bgcolor='#F5F5F5';
97. $bgr=0;
98. }
99. else
100. {
101. $bgcolor='#FFFFFF';
102. $bgr=1;
103. }
104.
105. // выводим ответы
106. echo "<tr bgcolor='$bgcolor' onMouseOut=this.style.backgroundColor='$bgcolor' onMouseOver=this.style.backgroundColor='#BED9FB'>";
107. echo "<td align='center'>".$row['id_otvet']."</td>";
108. echo "<td align='center'>".$row['otvet']."</td>";
109. echo "<td align='center'><input type='checkbox' name='' value='1'></td>";
110. }
111. // кнопка SUBMIT Smile
112. echo "</tr><tr>";
113. echo "<td align='center' bgcolor='#FFFFD0'><b class='red'>Вопрос №</b></td>";
114. echo "<td align='center' bgcolor='#FFFFD0'><input type='submit' value='Ответить'></td>";
115. echo "<td align='center' bgcolor='#FFFFD0'><b class='red'>".$_GET['num']."</b></td>";
116. echo "</form></tr></table><br><center>";
117.
118. }
119. // выбираем функцию
120.
121. if ($_GET['flag']>0)
122. {
123. TestingUsers();
124. }
125. else
126. {
127. TestList();
128. }
129.
130.
131.
132. ?>
Как сделать, чтобы вопросы выводились по очереди после нажатия кнопки? Как написать цикл который будет его обрабатывать?
Спустя 38 минут, 42 секунды (3.05.2008 - 11:49) qpayct написал(а):
сам я не пробывал, но осмелюсь предположить, что надо делать так:
допустим tbltests
id
test_name
test_question
test_right_answer
test_answers
форма которая меняется при нажатии на кнопку $next_step - конец теста (взависимости от колличества вопросов, которые ты уж сам посчитаешь.)
ты уж извини, что я за тебя весь тест не прописал, но и своего говна навалом
торопился, возможны недоработки...
допустим tbltests
id
test_name
test_question
test_right_answer
test_answers
форма которая меняется при нажатии на кнопку $next_step - конец теста (взависимости от колличества вопросов, которые ты уж сам посчитаешь.)
Код
<?php
$choosed_test = $_POST[choosed_test];
$num_question = $_POST[num_question];
$q = mysql(DB,"SELECT * FROM tbltests WHERE test_name='$choosed_test' and test_question=$num_question");
$z = mysql_num_row($z);
if (mysql_errno()!=0) exit(mysql_error());
if ($z>0) {
?><form action="_self" method="post"><?
$f = mysql_fetch_array($q);
$num_question++;
// тут добавляешь условие если (колличество вопросов = $num_question) тогда $next_step = конец теста
?>
<input type="hidden" name="num_question" value="<?=$num_question?>">
// тут прописуешь форму отображения вопроса и возможных ответов.
<input type="submit" value=<?=$next_step?> />
<?
}
?>
</form>
$choosed_test = $_POST[choosed_test];
$num_question = $_POST[num_question];
$q = mysql(DB,"SELECT * FROM tbltests WHERE test_name='$choosed_test' and test_question=$num_question");
$z = mysql_num_row($z);
if (mysql_errno()!=0) exit(mysql_error());
if ($z>0) {
?><form action="_self" method="post"><?
$f = mysql_fetch_array($q);
$num_question++;
// тут добавляешь условие если (колличество вопросов = $num_question) тогда $next_step = конец теста
?>
<input type="hidden" name="num_question" value="<?=$num_question?>">
// тут прописуешь форму отображения вопроса и возможных ответов.
<input type="submit" value=<?=$next_step?> />
<?
}
?>
</form>
ты уж извини, что я за тебя весь тест не прописал, но и своего говна навалом
торопился, возможны недоработки...
Спустя 1 год, 13 дней, 2 часа, 52 минуты, 38 секунд (16.05.2009 - 14:41) Gudwin написал(а):
to kuliev
дружище, стукни в аську 418948335 или на мыло напиши hippie2003@mail.ru
очень срочно!
дружище, стукни в аську 418948335 или на мыло напиши hippie2003@mail.ru
очень срочно!