Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
629 / 41 / 25
Регистрация: 25.04.2017
Сообщений: 510
1

Простой тест

30.10.2018, 16:05. Показов 2269. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, нужно написать тест, который должен работать следующим образом:
Есть БД
id quest_text(заголовок вопроса) first_quest(вопрос1) second_quest third_quest fourth_quest answer(номер правильного ответа)
Нужно из БД брать 5 случайных вопросов и выводить по одному, и в конце вывести результат;
Я сделал по другому(вывел их все), как сделать так, как написано выше или иначе.
Вот что сделал я
test.php
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
45
46
47
48
49
50
<?php
$dbc = mysqli_connect('localhost','root','','questdb') 
   or die('Ошибка соединения с MySQL сервером');
   mysqli_set_charset($dbc,"utf8");
?>
 
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<form action = "request.php" method = "post" name = "quest">
 
 
<?php
 
   $query="SELECT * FROM `questions`";
   $result = mysqli_query($dbc,$query)
        or die('Error querying database');
 
         
                while ($row = mysqli_fetch_assoc($result)) { 
 
        echo '
        
            <div class="quest_grid">
            <ul>
        <h1>'.$row['quest_text'].'</h1>
        <li><input  type = "radio" value="1" name = "rb'.$row['id'].'">'.$row['first_quest'].'</li>
        <li><input  type = "radio" value="2" name = "rb'.$row['id'].'">'.$row['second_quest'].'</li>
        <li><input  type = "radio" value="3" name = "rb'.$row['id'].'">'.$row['third_quest'].'</li>
        <li><input  type = "radio" value="4" name = "rb'.$row['id'].'">'.$row['fourth_quest'].'</li>
        </ul>
        </div>
        
        
        
        ';
        }
        
         mysqli_close($dbc);
 
 
?>
<input type="submit" value ="Отправить">
 
</form>
</body>
</html>
request.php
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
<?php
 
$dbc = mysqli_connect('localhost','root','','questdb') 
   or die('Ошибка соединения с MySQL сервером');
   mysqli_set_charset($dbc,"utf8");
   
   $res = mysqli_query($dbc,"SELECT COUNT(*) FROM `questions` ");
   $row = mysqli_fetch_row($res);
   $total = $row[0]; // всего записей   
  
   $query="SELECT id,answer FROM `questions`";
   $result = mysqli_query($dbc,$query)
        or die('Error querying database');
 
                $arr_correct=array();
                while ($row = mysqli_fetch_assoc($result)) { 
                 $arr_correct[$row['id']]=(int)$row['answer'];
                }
 
mysqli_close($dbc);
 
$kol = 0;
for($i = 1;$i<=$total;$i++)
{
    if($arr_correct[$i]== (int)$_POST['rb'.$i])
    {
        $kol++;
    }
}
echo "Количество правильных ответов $kol из $total";
 
?>
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.10.2018, 16:05
Ответы с готовыми решениями:

Простой тест на php
Имеется кнопка начать : &lt;form action=&quot;check.php&quot; style=&quot;text-align:center&quot;...

Простой тест на JS
всем добрый день)снова я кв ам за помощью)вы безумно мне помогли в прошлом вопросе!начала делать...

Формы-Простой тест JS!
Помогите нужно сделать такой тест

Тест в Delphi простой
Здравствуйте,помогите пожалуйста написать тест в Delphi,чтобы при прохождение его выводило...

16
767 / 323 / 157
Регистрация: 26.05.2016
Сообщений: 2,127
30.10.2018, 16:20 2
Цитата Сообщение от worldandlife Посмотреть сообщение
Нужно из БД брать 5 случайных вопросов и выводить по одному, и в конце вывести результат;
функция Rand
Цитата Сообщение от worldandlife Посмотреть сообщение
выводить по одному,
цикл не используйте просто
0
1261 / 959 / 225
Регистрация: 01.10.2018
Сообщений: 3,713
30.10.2018, 17:17 3
Набор вопросов теста нужно где-то сохранять, иначе могут появляться повторные вопросы. В крайнем случае очередной вопрос можно сравнивать с вопросами, которые уже задавались, и при совпадении его пропускать (генерировать новый).
0
629 / 41 / 25
Регистрация: 25.04.2017
Сообщений: 510
30.10.2018, 17:24  [ТС] 4
Я не пойму как сделать чтобы он показывал вопросы один за другим, а уже в конце вывел результат
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    
$query="SELECT * FROM `questions` ORDER BY RAND() LIMIT 5";
   $result = mysqli_query($dbc,$query)
        or die('Error querying database');
$row = mysqli_fetch_assoc($result);
 
        echo '
        
            <div class="quest_grid">
            <ul>
        <h1>'.$row['quest_text'].'</h1>
        <li><input  type = "radio" value="1" name = "rb'.$row['id'].'">'.$row['first_quest'].'</li>
        <li><input  type = "radio" value="2" name = "rb'.$row['id'].'">'.$row['second_quest'].'</li>
        <li><input  type = "radio" value="3" name = "rb'.$row['id'].'">'.$row['third_quest'].'</li>
        <li><input  type = "radio" value="4" name = "rb'.$row['id'].'">'.$row['fourth_quest'].'</li>
        </ul>
        </div>
        
        
        
        ';
Добавлено через 2 минуты
Цитата Сообщение от estic Посмотреть сообщение
Набор вопросов теста нужно где-то сохранять
Ну с этим не ясно, я пока должным образом еще вывод не организовал и логику
0
1261 / 959 / 225
Регистрация: 01.10.2018
Сообщений: 3,713
30.10.2018, 17:26 5
Чтобы при обновлении страницы не генерировался другой вопрос, сразу сохраняйте номер очередного вопроса в "стеке ответов", т.е. до получения ответа.

Добавлено через 1 минуту
Это к предыдущему сообщению.
0
629 / 41 / 25
Регистрация: 25.04.2017
Сообщений: 510
30.10.2018, 17:29  [ТС] 6
Цитата Сообщение от estic Посмотреть сообщение
Чтобы при обновлении страницы не генерировался другой вопрос, сразу сохраняйте номер очередного вопроса в "стеке ответов", т.е. до получения ответа.
Может покажете, как это делается? До меня не доходит...
Вот у меня документ test.php - выводит мне пять случайных вопросов на экран, причем нужно как то выводить их по одному и сравнивать нажатый радио с правильным ответом в базе, и если они совпадают, то ++, а потом уже вывести на экран результат; Может это и просто но что то не могу сообразить
0
1261 / 959 / 225
Регистрация: 01.10.2018
Сообщений: 3,713
30.10.2018, 17:30 7
Цитата Сообщение от worldandlife Посмотреть сообщение
Ну с этим не ясно, я пока должным образом еще вывод не организовал и логику
От упомянутого мной будет зависеть и логика, и вывод.
0
629 / 41 / 25
Регистрация: 25.04.2017
Сообщений: 510
30.10.2018, 17:35  [ТС] 8
Цитата Сообщение от worldandlife Посмотреть сообщение
сравнивать нажатый радио с правильным ответом в базе
Наверное еще должна быть кнопка вроде"выбрал вариант и нажал отправить и показывает след. вопрос" + нужно проверять как то, вдруг пользователь забыл нажать на радио(они же в начале не выбраны)

Добавлено через 2 минуты
Цитата Сообщение от estic Посмотреть сообщение
стеке ответов"
А что за стек ответов тогда? Массив?
0
1261 / 959 / 225
Регистрация: 01.10.2018
Сообщений: 3,713
30.10.2018, 17:51 9
Цитата Сообщение от worldandlife Посмотреть сообщение
Может покажете, как это делается? До меня не доходит...
Вариантов много. Выбирайте любой. Готового под рукой нет. Предлагайте. Я дам оценку.

Цитата Сообщение от worldandlife Посмотреть сообщение
А что за стек ответов тогда? Массив?
О чем вы вообще? Вы пока что написали, как хранятся вопросы (не самый оптимальный вариант в плане возможности иметь разное количество вариантов ответа, ну да ладно). Нужно подумать, о сохранении результатов, промежуточном хранении результатов и т.д. Что и называется логикой.

Добавлено через 8 минут
Начните хотя бы с ответа на вопрос, где предполагается хранить состояние теста, на клиенте или на сервере.
0
629 / 41 / 25
Регистрация: 25.04.2017
Сообщений: 510
30.10.2018, 17:54  [ТС] 10
Цитата Сообщение от estic Посмотреть сообщение
на клиенте или на сервере.
Пусть будет на сервере
0
1261 / 959 / 225
Регистрация: 01.10.2018
Сообщений: 3,713
30.10.2018, 17:55 11
Цитата Сообщение от worldandlife Посмотреть сообщение
Пусть будет на сервере
Обоснуйте.
0
629 / 41 / 25
Регистрация: 25.04.2017
Сообщений: 510
30.10.2018, 17:58  [ТС] 12
Цитата Сообщение от estic Посмотреть сообщение
Обоснуйте.
Я не знаю, ответил на ваш вопрос
Может быть сессии
0
1261 / 959 / 225
Регистрация: 01.10.2018
Сообщений: 3,713
30.10.2018, 18:03 13
Цитата Сообщение от worldandlife Посмотреть сообщение
Я не знаю, ответил на ваш вопрос
Мне не надо отвечать. Себе ответьте.

Цитата Сообщение от worldandlife Посмотреть сообщение
Может быть сессии
Мы сейчас о логике говорим, а не об инструментах. Каковы аргументы в пользу этого варианта?
0
14 / 60 / 21
Регистрация: 15.06.2017
Сообщений: 572
30.10.2018, 18:44 14
Редчайший понос. Автору темы противопаказанно быть программистом. Берут же мудаков на работу
0
629 / 41 / 25
Регистрация: 25.04.2017
Сообщений: 510
30.10.2018, 19:30  [ТС] 15
Цитата Сообщение от otto-fukin Посмотреть сообщение
Редчайший понос. Автору темы противопаказанно быть программистом. Берут же мудаков на работу
Вообще то я учусь, а из того, что написалestic, мне просто ничего не понятно, хорошего дня

Добавлено через 1 минуту
Цитата Сообщение от otto-fukin Посмотреть сообщение
противопаказанно быть программистом

Не по теме:

похоже на то...

0
767 / 323 / 157
Регистрация: 26.05.2016
Сообщений: 2,127
30.10.2018, 20:28 16
Если вам нужен один, зачем выводить пять? Выводите один, под ним текстовое поле, или что то там - радиобатаны, +выводите кнопку садмит, с текстом, следующий вопрос, итого: один вопрос, +радиобатан+кнопка
2.по нажатию на кнопку, проверяйте равен ли выбранный батан с правильным ответом, если да то, любыми способами записывайте результат
1)в сессию
2)временный текстовой файл, с именим отвечающего
3)в базу
Если не правильный, тоже самое записываем куда то
3)когда это все сделали выводите опять же следующий вопрос с кнопкой и радио
И тд.
В конце когда все вопросы кончатся, достаете результат

Добавлено через 6 минут
Можете сделать такую фишку, типо первый вопрос не правильно, создайте текстовой файл, создайте массив с разными текстами, типо, чувак, ответ неправильный 2.ну ты и сглупил 3)это даже дети знают! И тд
Плюс создайте массив с правильным вариантом, типо 1)ты крут2) молодчик и тд
Когда отвечают вы сравнивайте, и достаете рандомно из массива любое значение, и добавляйте в текстовой файл по типо первый вопрос, чувак ответ неправильный второй вопрос-эх то даже дети знают,третий-ты крут и тд, также можно в скобках приписать сам вопрос, чтобы отвечающий мог посмотреть где он правильно ответил
0
1261 / 959 / 225
Регистрация: 01.10.2018
Сообщений: 3,713
30.10.2018, 23:47 17
Цитата Сообщение от worldandlife Посмотреть сообщение
Вообще то я учусь, а из того, что написал estic, мне просто ничего не понятно
Если вам не понятно, что сначала создается алгоритм, а уже потом пишется программа, то вам никто и ничто не поможет. Начните с основ.

Добавлено через 25 минут
Раз собрались хранить состояние на сервере, подумайте о структуре хранения, о создании и изменении этой структуры и т.п. Например, создаете запись в соответствующей таблице при запуске теста, сохраняя в ней токен для идентификации теста и другую исходную информацию, например имя тестируемого, после чего перенаправляете пользователя на страницу первого вопроса, например по адресу /test/токен?q=1, и т.д.
0
30.10.2018, 23:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.10.2018, 23:47
Помогаю со студенческими работами здесь

Самый простой тест на С#
Помогите новичку, есть код примитивного теста на C# c вопросом (label) и 3 ответами (radio.button),...

Создать простой тест
Здравствуйте, нужно написать программу, в которую можно будет вводить вопросы , в исходный код , и...

Простой тест на thml
Здраствуйте я написал тест по примеру но у меня не выводет результат подскажыте что не так зделал....

Php простой тест
Привет! С php познакомилась относительно недавно и у меня возникла проблема. Есть набросок кода для...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru