За последние 24 часа нас посетили 233980 программистов и 1739 роботов. Сейчас ищут 1968 программистов ...

Создание тестов с использованием php, mysql, js

Тема в разделе "PHP для новичков", создана пользователем _ne_scaju_, 27 ноя 2017.

  1. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Доброе времени суток, опять у меня вопрос появился.
    1. Мне нужно создать систему тестирования все вопросы и ответы будут хранится в БД.
    2. На каждый вопрос по 3-4 ответа.
    3. Буду составлять еще балы за тест, ну и это будет влиять на рейтинг. (Этот пункт у меня в планах)
    4. Вроде все не пропустил.
    Объясните пожалуйста логику тестирования, логику базы данных, а дальше по ходу что не смогу сделать буду вопросы задавать.
     
  2. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Я делал подобную систему чисто для общего развития. Получилось три сущности: тест, вопрос, ответ. И связи между ними:
    тест - вопрос (1:М)
    вопрос - ответ (М:М), так как один и тот же ответ может быть на разные вопросы (например ответы "да" и "нет")
    Итого в базе потребовалось 4 таблицы:
    1. тесты (id, название, проходной балл)
    2. вопросы (id, вопрос, id-теста)
    3. ответы (id, ответ)
    4. вопрос-ответ (id, id -вопроса, id -ответа, баллы)

    Можно еще одну сущность сохранять в базе - результаты (М:1 к тестам и М:1 к пользователям), если есть пользователи в базе данных.
     
    _ne_scaju_ нравится это.
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Звучит как сделайте всё за меня. php. js - это всё элементарно. Вот продумать логику - как раз работа программиста.
     
  4. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mkramer
    Нет я не прошу сделать за меня, общую логику прошу составить.
    --- Добавлено ---
    @Maputo
    Мне кажется что таблиц дофига как для такой системы.
     
  5. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Это и значит сделать. Спрограммировать можно и мартышку научить, а вот логику составить - это самое сложное. А так @Maputo всё подсказал тебе. Только зачем вопросы-ответы делать многие-ко-многим, я не въехал, ну может в его случае было уместно. 4 таблицы - это не дофига.
     
  6. СтудПом

    СтудПом Новичок

    С нами с:
    8 ноя 2017
    Сообщения:
    17
    Симпатии:
    0
    Для решения задачи надо разобраться только с двумя вещами
    1. HTML-формы
    2. Обработчик фомы (action) на сервере
     
  7. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @СтудПом
    Мне коммент нравится прям впечатлил, это и так очевидно :D
     
  8. СтудПом

    СтудПом Новичок

    С нами с:
    8 ноя 2017
    Сообщения:
    17
    Симпатии:
    0
    -ну так разобрались с обработчиком? Это же очевидно - получаете форму, если есть поле - ставите плюс, если нет - ставите минус. Пересчитываете баллы и выводите пользователю.
     
  9. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @СтудПом
    я еще и не начал делать, пока логику собираю данных скриптом, как они должны выглядеть, в интернете вообще маловато скриптов по тестам.
     
  10. СтудПом

    СтудПом Новичок

    С нами с:
    8 ноя 2017
    Сообщения:
    17
    Симпатии:
    0
    Так сперва не с логикой разбирайтесь, а тупо - прочитать форму.
    Если не получается написать обработчик, используйте http://form.staff-base.com/ - можете послать форму и посмотреть ответ, как форму отладите, пишите свой обработчик. С логикой вопросов быть не должно, её просто нету: пришли правильные данные - "прибавили" баллы, неправильные - "убавили".
     
  11. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
  12. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Блин мне так тяжело с этим скриптом, вроде бы легко должно быть)
    За основу взял, выше приведенную структуру бд.
    И теперь думаю что и как делать( не получается. Посоветуйте что ни-будь спасибо.
     
  13. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @_ne_scaju_, госпади спаси и сохрани год в программировании и не получается это сделать мож не твоё?
     
  14. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @askanim
    Тесты не мое) Мне лет 5 надо учится с моими умениями думать как программист)
    --- Добавлено ---
    @askanim
    А ты знаешь по пустякам лучше не сдаватся я целеустремленный сразу не сдаюсь.
     
  15. laszlopv

    laszlopv Активный пользователь

    С нами с:
    26 фев 2017
    Сообщения:
    244
    Симпатии:
    40
    Если вам сложно увидеть всю работающую программу целиком разбейте её на части.
    Я бы поступил так:
    - Сделал стандартный блок отвечающий за прохождение вопроса. 1 вопрос 1 результат.
    - Сделал блок выше универсальным, чтобы можно было подставлять любые вопросы и он правильно работал.
    - Сделал поочередный вывод нескольких вопросов (по сути прохождение теста)
    - Сохранил бы результаты всех пройденных блоков и посчитал оценку.

    Таким образом я бы решал небольшие задачи, которые в конце сложились в одну целую систему.
     
  16. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Ну напиши теперь запросы, Как вставить новый вопрос, как вставить к нему ответы и т.п. Вот просто запросы сюда напиши, как при такой структуре базы создать новый вопрос. Ты всё ищешь, откуда бы скопипастить :(
     
  17. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    А чё у тебя проблемы с логикой? Сколько будет 1+1 ?
     
  18. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @askanim
    В даном случае вопрос глуппый.
    --- Добавлено ---
    @mkramer
    Запросы сделать могу) собрать воедино не получается :(
     
  19. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    @_ne_scaju_ я же тебе дал ссылку с темой
     
  20. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @Dimon2x
    Я смотрел твой топик.
     
  21. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Напиши алгоритм по-русски, что я тебе всегда говорил
     
  22. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Хорошо)
    Для начало определяем что и в каком классе будет хранится.
    PHP:
    1. class Test{
    2. public static function test_all(){
    3. 1. if ( если есть тесты){
    4. делаем запрос к базе вытягиваем все тесты
    5. }
    6. иначе
    7. {
    8. редирект на главную
    9. }
    10. }
    11. public static function test_one($id){
    12. 2. if (если пользователь нажал на какой ни-будь тест)
    13. {
    14. делаем запрос вытигиваем все ответы и вопросы по id которое пришло из ссылки
    15. }
    16. иначе{
    17. редирект на главную
    18. }
    19. }
    20. public static function test_check(){
    21. делаем просто запрос проверяем есть ли такой вопрос с ответом в базе
    22. Ниже еще запрос проверяет правильность ответа пользователя
    23. возвращаем результат запроса
    24. }
    25. }
    этот контроллер будет в роутер попадать
    PHP:
    1. class TestController
    2. {
    3. public static function actionTestAll(){
    4. Test::test_all();
    5. require_once(ROOT. 'форма отображения');
    6. }
    7.  
    8. public static function actionTestOne($getID){
    9. Test::test_one($getID);
    10. require_once(ROOT. 'форма отображения');
    11. }
    12.  
    13. public static function actionCheck(){
    14. if ( Test::test_check() )
    15. плюсуем бал юзеру
    16. }
    17. иначе
    18. {
    19. не чего не добавляем или не делаем этот пункт
    20. }
    21. }
    Примерно вот такую структуру я представляю словами!!! Что не так в ней???
     
  23. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Зачем ты сразу придумываешь какие-то контроллеры, классы, роутеры и прочие фитчи? Ты напиши список того, какие действия будет делать пользователь с твоим сайтом, и что должен сайт сделать в ответ. Например:
    1. Пользователь заходит на главную страницу
    2. Сайт запрашивает названия всех тестов в базе и выдаёт их на главную в виде красивой вёрстки
    И т.п. Где-то будет всё не так просто. Я бы начал вообще с админки, или с того, откуда все эти тесты окажутся в базе. А потом уже будешь всякие контроллеры рисовать. К каждому такому пункту.
     
  24. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    Как я понимаю:
    1. Вывод вопросов и варианты ответов (HTML-формой)
    2. Сделать обработку на сервере, через POST:
    a. Проверить - все ли inputs radio заполнены:
    PHP:
    1. foreach ($_POST as $value)
    2. if($value == '') exit('Вы ответили не на все вопросы');
    б. Проверить на правильность ответов: тут ты уже можешь чудить как тебе хочется, либо использовать базу данных и сверять, либо сделать текстовую бд (по-идее меньше нагружает сервер, но не проверял).
    База может быть такой (MySQL):
    ID Question Answer
    и сверяешь, тут я уже не буду писать код, сам продумай, ибо я не знаю, как ты хочешь получить данные из бд, массивом или просто переменными, но по сути $answer == $_POST['номер'];
    в. И последнее, подсчет: сколько правильных на неправильных и в процентном соотношении. Или можешь просто вывести сколько правильных или неправильных, это на твое усмотрение.
    г. Вносишь в другую таблицу результат:
    ID username correct wrong final_result (тут тоже продумай базу). Впрочем все не так сложно, напиши на бумаге, как ты хочешь чтобы твой скрипт работал.
     
  25. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @Danil005
    я на странице не буду выводить массив вопросов, я их буду по очереде подгружать.
    Из сессии, из базы вытащю а в сессию помещю
    --- Добавлено ---
    @mkramer
    1. Пользователь зашел на страницу тестов, ему выволась красивая страница со всеми тестами.
    2. У пользователя есть выбор какой ему тест пройти, он будет выбирать нужный ему тест.
    3. Пользователь доволен что нашел тест который хотел пройти и переходит на него.
    4. Для него открывается еще одна красивая страница, где он видет один вопрос и варианты ответов на него.
    5. Пользователь выбарает вариант ответа и жмет кнопку далее, ему открывается новый вопрос с вариантами ответа на этой же странице.
    6. Пользователь опять выбирает вариант и жмет кнопку далее, будет продолжатся до тех пор пока тест не закочится.
    7. После окончания теста, пользователь увидет уведомление о результате ответов правильных и какая оценка у него.
    8. Пользователь доволен возвращается к списку тестов, либо выбирает улучшить результат.
    Логику закончил свою примерно для меня выглядит на таким образом.