Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 100

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

19.08.2019, 05:31. Показов 3612. Ответов 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru