0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 100

Онлайн-тест (вступительного экзамена) в институте

19.08.2019, 05:31. Показов 3876. Ответов 61
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день коллеги,
Онлайн-тест (вступительного экзамена) в институте.

Исходные данные:
1) Всего 120 вопросов по 3 предметам. География - 50 вопросов, История - 30 вопросов и Биология - 40 вопросов.
2) В тесте будет 15 вопросов по географии, 10 вопросов по истории и 12 вопросов по биологии.
3) На тест дается 50 минут.

Надо сделать на главной странице:
1) Три кнопки с названиями предметов. К примеру, нажав на “ГЕОГРАФИЯ” абитуриент открывал все 50 вопросов по очереди, в каждом вопросе прилагается по 4 ответа. Один из которых правильный. Он нажимает на один ответ из четырех, потом кнопку “ПРОВЕРИТЬ” и система показывает его ответ и правильный ответ. Типа этого https://cdlstudy.com/test_sample/index.php?id=1. Здесь не будет учета времени.
2) Четвертая кнопка будет “ПРОЙТИ ТЕСТ НА ВРЕМЯ”. Тут будет задаваться 37 вопросов (по 3 предметам) вразброс со счетчиком обратного времени - 50 минут.

Вопросы:
1) Все 120 вопросов загрузить в БД phpMyAdmin в 1 общую таблицу или в 3 разные таблицы? Как лучше?
2) Как настроить вытаскивание 15 вопросов из 50 по ГЕОГРАФИИ?
3) Кто-нибудь раньше такое делал?

Спасибо. Жду.

P.S. Предметов на самом деле больше, просто расписал на примере 3-х для наглядности.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.08.2019, 05:31
Ответы с готовыми решениями:

Вероятность сдачи вступительного экзамена
вероятность сдачи вступительного экзамена для выпускников школы равна 0.8. Сколько нужно абитуриентов, чтобы с вероятностью 0.9 можно было...

VB6.0 Типизированные файлы.Дан файл,содержащий сведения о результатах вступительного экзамена по математике.
Дан файл,содержащий сведения о результатах вступительного экзамена по математике. Он содержит фамилию абитуриента и полученную оценку. На...

Онлайн тест
Как реализовать онлайн тест на php. Допустим есть десять вопросов с 4 вариантами ответами и чтоб при нажатии на сабмит выводило сколько...

61
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
06.10.2019, 10:09
Студворк — интернет-сервис помощи студентам
PHP
1
2
3
4
$a = range(5, 55);
shuffle($a);
$a = array_slice($a, 0, 13);
echo '<pre>'.print_r($a,true).'</pre>';
но лучше так:
PHP
1
2
3
4
5
6
$b = [];
while(count($b)<12){
    $num = mt_rand(5,55);
    $b[$num] = $num;
}
var_export($b);
1
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 100
06.10.2019, 21:11  [ТС]
sasha0012, СПАСИБО! )
0
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 100
07.10.2019, 22:00  [ТС]
sasha0012, я извиняюсь, но если с цифрами все ОК, то выборка случайных id-шников вопросов через запятую у меня не получается!

HTML5
1
2
3
4
5
6
7
8
9
elseif(count($_SESSION)>0 && $utp==1){
 
$voprosy=$db->get('voprosy');
shuffle($voprosy);
foreach($voprosy as $vopros) 
echo $dfg = json_encode($vopros['id'],true);
//echo implode(', ', explode(' ', $dfg)); 
 
}
1) Использую подключенный файл: require_once ('MysqliDb.php');

2) Здесь у меня получается случайная выборка id-шников вопросов слитно: 2615728181611272420919258142231211317221 012
Не могу добавить запятую после каждого id. Здесь implode не помогает.

Как можно вставить запятые?
0
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
07.10.2019, 23:35
sheriff5, может быть спросить это у того кто формирует эту колбасу: 2615728181611272420919258142231211317221 012

Я понятия не имею что происходит в приведённом выше коде. Я так полагаю в $voprosy находится массив айдишников, ну тогда сразу после shuffle ставьте implode. Зачем перебирать его (foreach)?
0
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 100
08.10.2019, 05:01  [ТС]
sasha0012, если расписать, то получится так:
HTML5
1
2
3
4
5
6
7
elseif(count($_SESSION)>0 && $utp==1){  // начать сессию, если у пользователя уровень доступа = 1, то  
$voprosy=$db->get('voprosy'); // подключится к таблице вопросы
foreach($voprosy as $vopros) // создать массив
$dfg = json_encode($vopros['id'],true);  // вытащить из массива id-шники вопросов в формате json, в одну строку
shuffle($dfg);   // перемешать их
echo implode(', ', explode(' ', $dfg)); // добавить запятую и пробел после id-шников вопросов
}
Так тоже не получается, здесь ругается на shuffle.

Вы знакомы с файлом MysqliDb.php ?
Если нет, то не могли бы просто написать, как вытащить СЛУЧАЙНО id-шники из любой таблицы phpMyAdmin в формате json, в одну строку, через запятую и пробел?!
0
 Аватар для atanov
640 / 481 / 172
Регистрация: 26.05.2016
Сообщений: 2,674
08.10.2019, 09:36
sheriff5, а что мешает просто в цикле пройтись?
PHP
1
2
3
4
5
6
<?php
for ($i = 0; $i < 12; $i++)
{
    echo rand(5, 55).'<br>';
}
?>
1
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
08.10.2019, 10:44
Цитата Сообщение от sheriff5 Посмотреть сообщение
как вытащить СЛУЧАЙНО id-шники из любой таблицы phpMyAdmin
не из phpMyAdmin а из mysql. А как это сделать было написано здесь (пункт второй).

Цитата Сообщение от sheriff5 Посмотреть сообщение
в формате json, в одну строку
это ещё зачем??? Зачем вытаскивать айдишники потом заворачивать в одну строку json и потом тут же разворачивать в массив потом схлопывать массив в строку??? Вы сами понимаете что делаете и что происходит?

Ознакомьтесь с этим: вывод данных из mysql на php
0
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 100
08.10.2019, 21:52  [ТС]
sasha0012, atanov, спасибо за подсказки!

Я тут покопался в документации к подключаемому файлу MysqliDb.php и нашел в нем нужную функцию rawQueryValue.

В итоге ВРОДЕ получил нужный код - 3 варианта:

1) через JSON

HTML5
1
2
3
4
5
6
7
8
9
$logins = $db->rawQueryValue ('select id from voprosy');                  // взяли все id
shuffle($logins);                                                         // перемешали их
foreach ($logins as $login)                                          // перебераем массив
echo $baza = json_encode($login,true);                       // преобразуем их в json
 
    $data=array(
        'id_voprosov'=>$baza                  // записываем в поле id_voprosov
    );
    $db->update('test',$data);
На экране получаю 720121811131522212511917232910148261624 // внутри все 22 id-шника вопросов вразброс,
а в mysql почему-то в поле id_voprosov записан только последний id-шник вопроса "24". Почему так?

2) Без JSON

HTML5
1
2
3
4
5
6
7
8
9
$logins = $db->rawQueryValue ('select id from voprosy');
shuffle($logins);
foreach ($logins as $login)
echo $baza = $login;
 
    $data=array(
        'id_voprosov'=>$baza        
    );
    $db->update('test',$data);
На экране получаю 713122232191102624151122181720141682519// внутри все 22 id-шника вопросов вразброс,
а в mysql почему-то в поле id_voprosov записан только последний id-шник вопроса "19". Почему так?

3) Через запятую

HTML5
1
2
3
4
5
6
7
8
9
$logins = $db->rawQueryValue ('select id from voprosy');
shuffle($logins);
foreach ($logins as $login)
echo $baza = $login.',';
 
    $data=array(
        'id_voprosov'=>$baza        
    );
    $db->update('test',$data);
На экране получаю 21,13,10,23,15,7,9,24,11,25,17,19,14,18, 1,22,2,26,20,16,12,8, // внутри все 22 id-шника вопросов вразброс, а в mysql почему-то в поле id_voprosov записан только последний id-шник вопроса "8," Почему так?

4) Если же использовать просто цифры:
HTML5
1
2
3
4
5
6
7
8
$a = range(1, 22);
shuffle($a);
$baza = json_encode($a,true);
 
    $data=array(
        'id_voprosov'=>$baza2       
    );
    $db->update('test',$data);
На экране получаю [6,16,2,20,3,17,1,14,22,13,11,18,8,19,7,1 5,12,4,21,10,9,5] // внутри все 22 цифры вразброс, а в mysql в поле id_voprosov записано также [6,16,2,20,3,17,1,14,22,13,11,18,8,19,7,1 5,12,4,21,10,9,5]

ВОПРОСЫ:
1) Почему при использовании массива, на экране монитора все 22 id-шника вопросов, а в mysql записан только последний id-шник вопроса?
2) Почему при работе без массива все в порядке?
3) Как лучше записывать 22 id-шники вопросов в поле id_voprosov? В виде JSON'a, просто цифры или цифры через запятую?

sasha0012, для чего я использую JSON?
Для того чтобы не писать в 1 (!) ячейку таблицы массив из 37 ключей и 37 id-шников вопросов к ним . А в нем должно быть в конечном итоге вразброс все 37 вопросов теста по 3 предметам (при том что в самой базе 120 вопросов), чтобы при начале теста брать из этой ячейки по одному id-шнику вопроса и показывать этот вопрос на экране монитора!

Спасибо. Жду.

P.S. В данном примере отражены только 22 вопроса (думаю их хватает для полноты картины), но потом я к ним еще добавлю 15 вопросов. Просто пока некогда забивать вопросы в sql.
0
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 100
09.10.2019, 18:42  [ТС]
Кто-то может помочь?
0
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 100
10.10.2019, 18:50  [ТС]
Есть тут программисты, работающие с sql через файл MysqliDb.php ?
Подскажите верный путь новичку?
0
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
10.10.2019, 20:21
Цитата Сообщение от sheriff5 Посмотреть сообщение
Есть тут программисты, работающие с sql через файл MysqliDb.php ?
такими темпами в эту ветку скоро космонавтов созывать надо будет. Эта ветка из серии: "Ничего себе за хлебушком пошёл".

Цитата Сообщение от sheriff5 Посмотреть сообщение
Подскажите верный путь новичку?
программист отличается от кодера тем что первый понимает что делает. Ели вы не собираетесь заниматься программированием, то закажите эту работу на фрилансе, это совсем не дорого выйдет.

Цитата Сообщение от sasha0012 Посмотреть сообщение
Ознакомьтесь с этим: вывод данных из mysql на php
если бы вы не проигнорировали это сообщение, то вам и не надо было бы подключать класс на 2500 строк и разбираться как он устроен. Для ващей задачи вам нужно только это:

PHP
1
2
3
4
5
6
7
8
9
$sql = mysqli_query($conn, "SELECT ....");
while($row = mysqli_fetch_array($sql))
{
    echo $row['id']; 
}
 
$sql2 = mysqli_query($conn, "INSERT INTO ....");
 
$sql3 = mysqli_query($conn, "UPDATE ....");
Всё, больше ничего!
0
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 100
11.10.2019, 20:41  [ТС]
Добрый вечер sasha0012,

Цитата Сообщение от sasha0012 Посмотреть сообщение
то закажите эту работу на фрилансе, это совсем не дорого выйдет.
Спасибо за заботу, но хотелось бы самому сделать до конца!

Цитата Сообщение от sasha0012 Посмотреть сообщение
то вам и не надо было бы подключать класс на 2500 строк
На этом классе много файлов завязано у меня в этом проекте. Просто я с ним еще не до конца разобрался!
Хороший класс - МНЕ НРАВИТСЯ! Компактный!

Цитата Сообщение от sasha0012 Посмотреть сообщение
Для ващей задачи вам нужно только это: ... Всё, больше ничего!
Громоздкая система получается! Не пойдет.

В общем я посмотрел примеры, и понял что забыл добавить всего 1 строку - создание пустого массива!
После этого все заработало:

$logins = $db->getValue ("voprosy", "id", null); // взять все id-шники из таблицы voprosy
shuffle($logins); // перемешать их
$rows = array(); // создать пустой массив
foreach ($logins as $login) // перебрать id-шники
$rows[] = $login; // добавить их в пустой массив
$data = json_encode($rows, true); // записать в формате JSON
echo $data; // показать на экране

$data=array(
'id_voprosov'=>$data
);
$db->update('test',$data);

Итого получается нужный результат, как на экране, так и в нужной ячейке 'id_voprosov' нужной таблицы "test" sql:

[7,26,11,16,23,15,22,10,8,17,9,18,1,25,12 ,2,13,24,20,21,14,19]
0
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 100
16.10.2019, 04:58  [ТС]
Обратный отсчет времени до окончания теста (экзамена)!

Привет коллеги,
Я 3 дня искал счетчик обратного времени и мне удалось из 2-х разных кодов сделать 1 нужный!
Он в минутах/ секундах, а также при окончании выходит из теста на нужную страницу!

Выставлю здесь, думаю кому-нибудь он обязательно пригодится!

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<br><br>
 
<script type="text/javascript">
function startTimer(duration, display) {
    var start = Date.now(),
        diff,
        minutes,
        seconds;
    function timer() {
        // get the number of seconds that have elapsed since 
        // startTimer() was called
        diff = duration - (((Date.now() - start) / 1000) | 0);
 
        // does the same job as parseInt truncates the float
        minutes = (diff / 60) | 0;
        seconds = (diff % 60) | 0;
 
        minutes = minutes < 10 ? "0" + minutes : minutes;
        seconds = seconds < 10 ? "0" + seconds : seconds;
 
        display.textContent = minutes + " мин. " + seconds + " сек."; 
 
        if (diff <= 0) {
            location.href = "http://javascript.ru";  // после окончания времени, автоматом редирект
        }
    };
    // we don't want to wait a full second before the timer starts
    timer();
    setInterval(timer, 1000);
}
 
window.onload = function () {
    var fiveMinutes = 60 * 22,                // здесь задается кол-во минут на тест
        display = document.querySelector('#time');
    startTimer(fiveMinutes, display);
};
 
</script>
 
<body>
    <div>Время на тест: <span id="time"></span></div>
</body>
 
<br><br>

Если кому-то вдруг нужен счетчик обратного времени ТОЛЬКО в секундах, то вот:

<b><span id="time"></span></b>
<script type="text/javascript">
var i = 300; //время в сек.
function time(){
document.getElementById("time").innerHTM L = i; //визуальный счетчик
i--;//уменьшение счетчика
if (i < 0) location.href = "http://javascript.ru"; //редирект
}
time();
setInterval(time, 1000);
</script>

Добавлено через 12 минут
Оба кода сохраняются в оригинальном виде, без <?php .... ?> в файлах формата *.php
0
Фрилансер
Эксперт PythonЭксперт JSЭксперт PHP
 Аватар для Azdeman
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
16.10.2019, 09:46
sasha0012, count лучше выносить за условие цикла.
0
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
16.10.2019, 10:36
Цитата Сообщение от Azdeman Посмотреть сообщение
count лучше выносить за условие цикла.
Azdeman, если хочешь что-то сказать, то хоть упомяни контекст. Я уже не говорю про примеры (типо как надо).
0
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 100
16.10.2019, 10:43  [ТС]
del
0
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 100
16.10.2019, 18:39  [ТС]
Добрый вечер sasha0012,
Со временем я разобрался. Как со временем на тест, так и с общим временем доступа к сайту пользователя (понял как это работает - думаю воплощу в код).

Вопрос:
Как сделать так, чтобы под 1 логином на сайте не могли работать одновременно 2-4 пользователя?
К примеру при старте session_start() я могу обновить в данных этого пользователя на sql ключ = 1.
Типа он в сети, и всех новых пользователей проверять на этот ключ. Если у него этот ключ = 1, то говорить ему, что под этим логином уже работает пользователь. А при выходе 1 пользователь нажав на ВЫХОД - обнуляет этот ключ.
Но что делать если у пользователя отключили свет - он, не успел выйти или просто закрыл браузер - тоже получается не удалил ключ?!
Как тогда он сможет зайти снова, если его ключ от логина = 1?!
0
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
16.10.2019, 22:19
Цитата Сообщение от sheriff5 Посмотреть сообщение
Как сделать так, чтобы под 1 логином на сайте не могли работать одновременно 2-4 пользователя?
При каждом входе заново стартуем сессии, причём для каждого входа нужно генерировать уникальный ключ текущей сессии, например: $_SESSION['session_key']. Ключ записываем в базу и в сессию, и при каждом обращении сравниваем ключ из сессии с ключом из базы, и если не подходит, значит не пропускаем. В таком случае на линии не смогут работать одновременно несколько пользователей на одном аккаунте.
0
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 100
17.10.2019, 05:09  [ТС]
sasha0012,
Цитата Сообщение от sasha0012 Посмотреть сообщение
Ключ записываем в базу и в сессию, и при каждом обращении сравниваем ключ из сессии с ключом из базы, и если не подходит, значит не пропускаем.
Это ясно! И ясно, что при завершении сессии, его уникальный ключ текущей сессии в базе удаляется при выходе!

А что делать, если пользователь не смог завершить сессию?
К примеру, он не успел выйти, отключили ему свет или просто закрыл браузер - получается не удалил уникальный ключ текущей сессии в базе?! Как тогда он сможет зайти снова?!
0
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
17.10.2019, 09:11
Цитата Сообщение от sheriff5 Посмотреть сообщение
Это ясно!
Это хорошо что ясно.
Цитата Сообщение от sheriff5 Посмотреть сообщение
А что делать, если пользователь не смог завершить сессию?
Нет, значит все-таки не ясно ))

Ключ из БД не надо удалять вообще! Только перезаписывать при каждом входе!
Цитата Сообщение от sheriff5 Посмотреть сообщение
К примеру, он не успел выйти, отключили ему свет или просто закрыл браузер
или просто ковыряется в носу. Так как нам узнать ему свет вырубили, он думает над вопросом, он думает как коровы в цирке на велосипеде катаются или он на унитазе сидит и при этом вкладка открыта? Ответ: нас это не интересует. Есть время старта теста, есть уникальный ключ который выдаётся при входе. Всё, больше нам ничего не нужно. Этого достаточно чтобы в одном аккаунте находился только один пользователь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.10.2019, 09:11
Помогаю со студенческими работами здесь

Тест онлайн
у нас завтра экзамен в виде электроннного теста,есть ли шанс найти ответ в коде страницы? код открывал ctrl+u &lt;div...

Тест онлайн фепо
такой вопрос можно ли узнать ответы через исходный код, браузер мозила, ctrl+U, или может можно написать javascript

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

Примеры приложений Тест-онлайн
Я только недавно начал работать с ASP.NET MVC. Есть задача создать приложение по тестированию. Тест со списком вопросов и вариантами...

Нужно создать онлайн тест для сайта
Тест на выбор профессии. Нужно выбрать (а) или (б). Например: 1) а. Ухаживать за животными | б. Обслуживать машины, приборы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Опции темы

Новые блоги и статьи
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru