Урок 1. Выводим варианты тестов

Дата публикации: 08-09-2014

создание системы тестирования

От автора: В цикле из нескольких уроков мы с вами будем создавать несложную, но вместе с тем функциональную систему тестирования, которая должна в первую очередь выполнять свою прямую задачу – оценка прохождения теста тестируемым.


скачать урок скачать исходники

Все уроки курса:

Метки: , ,

Комментарии (18)

  1. Андрей

    Здравствуйте. Прошу вас. Умоляю. Отправьте мне админ панель с регистрацией и возможностью комментировать тесты

    • Андрей Кудлай

      Здравствуйте, Андрей. Уроков по созданию админки нет, соответственно, нет и самой админки, поэтому отправлять просто нечего.

  2. Руслан

    Доброго дня!
    Вопрос по уроку при выводе массива (20 мин.)
    Ругается на 17 строку кода
    «Warning: mysqli_query() expects parameter 1 to be mysqli, resource given in J:\home\localhost\www\testing\functions.php on line 17″
    сама строка в коде прописана вот так: $res = mysqli_query($db, $query);
    где ошибка не могу понять.
    Подскажите пожалуйста.

    • Андрей Кудлай

      Здравствуйте, Руслан. Отвечу здесь в качестве исключения, в дальнейшем все вопросы по урокам этого курса можно задать в специальной теме на форуме. Если у Вас нет доступа в указанный раздел форума, тогда напишите в нашу службу поддержки, указав логин на форуме, и доступ будет открыт.
      Теперь по ошибке. Ошибка сообщает, что в качестве параметра функции mysqli_query передается не то, что она ожидает. Скорее всего, проблема с идентификатором соединения $db, т.е. в этой переменной, скорее всего, не идентификатор соединения. Если не разберетесь сами с ошибкой, тогда задайте вопрос в указанном разделе на форуме и выложите в архиве весь код проекта, я посмотрю.

  3. Pavel

    А что бы Вы могли порекомендовать по созданию древовидной системы тестирования. Те такой системы где вопросы подбираются в зависимости от ответов на предыдущий. Происхрдит как бы прохрд по ветке дерева. Для меня очень важна данная тема, буду очень благодарен Вам, если поможете. Заранее спасибо

    • Андрей Кудлай

      В этом случае каждый следующий вопрос должен выбираться отдельно из БД, в зависимости от ответа на предыдущий. В БД, соответственно, должна быть предусмотрена связь таких вопросов. Что-то вроде поля related_answer, значение которого будет ссылаться на ID предыдущего вопрос. Например, если пользователь выбрал ответ с ID 2, тогда выбираем вопрос с ID 2. Примерно так мне видится решение в теории.

  4. librus

    Андрей, скажите пожалуйста, из практики — какого размера можно делать ветку в БД questions и answers? Я имею ввиду, стоит ли заморачиваться с созданием questions2/answers2 и т.д., если в базе предусматривается 20 тестов. Или можно все вопросы/ответы заливать в одну(ну т.е. две) ветку questions/answers. Это будет порядка !600 вопросов и !3000 ответов. примерно. Заранее спасибо, думаю это многим будет интересно узнать.

  5. timisharin@gmail.com

    Скажите а как сделать что бы он сохранял данные пользователя с общим счетом?

    • Андрей Кудлай

      Для начала создать как минимум 2 таблицы: таблица пользователей и таблица результатов. Соответственно, добавить возможность авторизации пользователей, чтобы знать, кто проходит тестирование и для кого сохранять результаты. Ну и на последнем этапе не только выводить данные, но и записывать их в созданную таблицу.

  6. Андрей Власов

    Андрей, добрый день! Не нашел обсуждения этой темы на форуме, поэтому пишу здесь. Не могли бы Вы подробно объяснить (лучше в личной переписке) работу строки <a href="?test=»> из первого урока. А именно: как в качестве ссылки используется элемент массива?

    • Андрей Кудлай

      Здравствуйте, Андрей. Если темы на форуме нет, тогда Вы можете создать ее сами и задать вопрос, логично? :) По Вашему вопросу здесь. Через вопросительный знак на сервер можно передать GET параметры. В данном случае передается параметр test и на сервере он будет доступен в массиве $_GET['test']. Как-то так. Если интересует какой-то другой аспект, тогда на форуме задайте вопрос как можно конкретнее, и я постараюсь ответить.

  7. Username

    Подскажите пожалуйста как сохранять данные в результатов тестирования в таблицу. Я добавил две таблицы users и result, сделал авторизацию через сессии, в последней функции, где происходит вывод результатов написал
    if (!empty($_SESSION['login'])) {
    global $db;
    $query = «INSERT INTO result (parent_user,parent_test,mark) VALUES (‘».$_SESSION['fio'].»‘,’$test’,'$percent’)»;
    $res = mysqli_query($db, $query);
    }
    но ничего не происходит. На форуме ни кто не отвечает, поэтому решил здесь спросить

    • Андрей

      Записываются данные в БД с помощью запроса INSERT, как Вы и делаете. Если данные не сохраняются, значит есть проблема с логикой или в запросе. Здесь поможет только отладка кода. Начните с проверки, попадаете ли Вы в условие и доходит ли дело до запроса. Для этого достаточно распечатать запрос на экран. Если Вы увидите распечатку запроса, значит с логикой кода все в порядке, в этом случае проверьте корректность запроса — в нем должны быть верно перечислены поля и должны быть все соответствующие значения. Сам распечатанный запрос можно даже скопировать и выполнить в phpMyAdmin, чтобы убедиться в том, что он (не)работает. Как-то так.

      • Username

        В общем проблема как я понял была в запросе, я немного исправил его и добавил or die(mysqli_error($db)), теперь выводит
        INSERT INTO testing.result (result_id, parent_user, parent_test, mark) VALUES (NULL, ‘Ivanov Ivan Ivanovich’, ’1′, ’66.67′)
        Cannot add or update a child row: a foreign key constraint fails (testing.result, CONSTRAINT result_ibfk_2 FOREIGN KEY (parent_test) REFERENCES test (test_name))
        Простите что здесь спрашиваю

        • Андрей

          У Вас используется внешний ключ для связи таблиц, который накладывает какие-то ограничения. Либо уберите внешний ключ, либо согласуйте данные, чтобы они соответствовали имеющимся ограничениям. Это все, что могу пока подсказать. Судя по всему, проблема с полем parent_test, в которое Вы пытаетесь записать цифру 1, но которое ссылается на поле test.test_name, где, очевидно, но ID теста, а его номер. Хотя могу и ошибаться.

Добавить комментарий