Доброе времени суток, опять у меня вопрос появился. 1. Мне нужно создать систему тестирования все вопросы и ответы будут хранится в БД. 2. На каждый вопрос по 3-4 ответа. 3. Буду составлять еще балы за тест, ну и это будет влиять на рейтинг. (Этот пункт у меня в планах) 4. Вроде все не пропустил. Объясните пожалуйста логику тестирования, логику базы данных, а дальше по ходу что не смогу сделать буду вопросы задавать.
Я делал подобную систему чисто для общего развития. Получилось три сущности: тест, вопрос, ответ. И связи между ними: тест - вопрос (1:М) вопрос - ответ (М:М), так как один и тот же ответ может быть на разные вопросы (например ответы "да" и "нет") Итого в базе потребовалось 4 таблицы: 1. тесты (id, название, проходной балл) 2. вопросы (id, вопрос, id-теста) 3. ответы (id, ответ) 4. вопрос-ответ (id, id -вопроса, id -ответа, баллы) Можно еще одну сущность сохранять в базе - результаты (М:1 к тестам и М:1 к пользователям), если есть пользователи в базе данных.
Звучит как сделайте всё за меня. php. js - это всё элементарно. Вот продумать логику - как раз работа программиста.
@mkramer Нет я не прошу сделать за меня, общую логику прошу составить. --- Добавлено --- @Maputo Мне кажется что таблиц дофига как для такой системы.
Это и значит сделать. Спрограммировать можно и мартышку научить, а вот логику составить - это самое сложное. А так @Maputo всё подсказал тебе. Только зачем вопросы-ответы делать многие-ко-многим, я не въехал, ну может в его случае было уместно. 4 таблицы - это не дофига.
Для решения задачи надо разобраться только с двумя вещами 1. HTML-формы 2. Обработчик фомы (action) на сервере
-ну так разобрались с обработчиком? Это же очевидно - получаете форму, если есть поле - ставите плюс, если нет - ставите минус. Пересчитываете баллы и выводите пользователю.
@СтудПом я еще и не начал делать, пока логику собираю данных скриптом, как они должны выглядеть, в интернете вообще маловато скриптов по тестам.
Так сперва не с логикой разбирайтесь, а тупо - прочитать форму. Если не получается написать обработчик, используйте http://form.staff-base.com/ - можете послать форму и посмотреть ответ, как форму отладите, пишите свой обработчик. С логикой вопросов быть не должно, её просто нету: пришли правильные данные - "прибавили" баллы, неправильные - "убавили".
Блин мне так тяжело с этим скриптом, вроде бы легко должно быть) За основу взял, выше приведенную структуру бд. И теперь думаю что и как делать( не получается. Посоветуйте что ни-будь спасибо.
@askanim Тесты не мое) Мне лет 5 надо учится с моими умениями думать как программист) --- Добавлено --- @askanim А ты знаешь по пустякам лучше не сдаватся я целеустремленный сразу не сдаюсь.
Если вам сложно увидеть всю работающую программу целиком разбейте её на части. Я бы поступил так: - Сделал стандартный блок отвечающий за прохождение вопроса. 1 вопрос 1 результат. - Сделал блок выше универсальным, чтобы можно было подставлять любые вопросы и он правильно работал. - Сделал поочередный вывод нескольких вопросов (по сути прохождение теста) - Сохранил бы результаты всех пройденных блоков и посчитал оценку. Таким образом я бы решал небольшие задачи, которые в конце сложились в одну целую систему.
Ну напиши теперь запросы, Как вставить новый вопрос, как вставить к нему ответы и т.п. Вот просто запросы сюда напиши, как при такой структуре базы создать новый вопрос. Ты всё ищешь, откуда бы скопипастить
@askanim В даном случае вопрос глуппый. --- Добавлено --- @mkramer Запросы сделать могу) собрать воедино не получается
Хорошо) Для начало определяем что и в каком классе будет хранится. PHP: class Test{ public static function test_all(){ 1. if ( если есть тесты){ делаем запрос к базе вытягиваем все тесты } иначе { редирект на главную } } public static function test_one($id){ 2. if (если пользователь нажал на какой ни-будь тест) { делаем запрос вытигиваем все ответы и вопросы по id которое пришло из ссылки } иначе{ редирект на главную } } public static function test_check(){ делаем просто запрос проверяем есть ли такой вопрос с ответом в базе Ниже еще запрос проверяет правильность ответа пользователя возвращаем результат запроса } } этот контроллер будет в роутер попадать PHP: class TestController { public static function actionTestAll(){ Test::test_all(); require_once(ROOT. 'форма отображения'); } public static function actionTestOne($getID){ Test::test_one($getID); require_once(ROOT. 'форма отображения'); } public static function actionCheck(){ if ( Test::test_check() ) плюсуем бал юзеру } иначе { не чего не добавляем или не делаем этот пункт } } Примерно вот такую структуру я представляю словами!!! Что не так в ней???
Зачем ты сразу придумываешь какие-то контроллеры, классы, роутеры и прочие фитчи? Ты напиши список того, какие действия будет делать пользователь с твоим сайтом, и что должен сайт сделать в ответ. Например: Пользователь заходит на главную страницу Сайт запрашивает названия всех тестов в базе и выдаёт их на главную в виде красивой вёрстки И т.п. Где-то будет всё не так просто. Я бы начал вообще с админки, или с того, откуда все эти тесты окажутся в базе. А потом уже будешь всякие контроллеры рисовать. К каждому такому пункту.
Как я понимаю: 1. Вывод вопросов и варианты ответов (HTML-формой) 2. Сделать обработку на сервере, через POST: a. Проверить - все ли inputs radio заполнены: PHP: foreach ($_POST as $value) if($value == '') exit('Вы ответили не на все вопросы'); б. Проверить на правильность ответов: тут ты уже можешь чудить как тебе хочется, либо использовать базу данных и сверять, либо сделать текстовую бд (по-идее меньше нагружает сервер, но не проверял). База может быть такой (MySQL): ID Question Answer и сверяешь, тут я уже не буду писать код, сам продумай, ибо я не знаю, как ты хочешь получить данные из бд, массивом или просто переменными, но по сути $answer == $_POST['номер']; в. И последнее, подсчет: сколько правильных на неправильных и в процентном соотношении. Или можешь просто вывести сколько правильных или неправильных, это на твое усмотрение. г. Вносишь в другую таблицу результат: ID username correct wrong final_result (тут тоже продумай базу). Впрочем все не так сложно, напиши на бумаге, как ты хочешь чтобы твой скрипт работал.
@Danil005 я на странице не буду выводить массив вопросов, я их буду по очереде подгружать. Из сессии, из базы вытащю а в сессию помещю --- Добавлено --- @mkramer 1. Пользователь зашел на страницу тестов, ему выволась красивая страница со всеми тестами. 2. У пользователя есть выбор какой ему тест пройти, он будет выбирать нужный ему тест. 3. Пользователь доволен что нашел тест который хотел пройти и переходит на него. 4. Для него открывается еще одна красивая страница, где он видет один вопрос и варианты ответов на него. 5. Пользователь выбарает вариант ответа и жмет кнопку далее, ему открывается новый вопрос с вариантами ответа на этой же странице. 6. Пользователь опять выбирает вариант и жмет кнопку далее, будет продолжатся до тех пор пока тест не закочится. 7. После окончания теста, пользователь увидет уведомление о результате ответов правильных и какая оценка у него. 8. Пользователь доволен возвращается к списку тестов, либо выбирает улучшить результат. Логику закончил свою примерно для меня выглядит на таким образом.