Урок 2. Получение данных выбранного теста

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

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

От автора: В предыдущем уроке мы вывели на страницу список всех доступных тестов. Задачей текущего урока будет получение массива вопросов и ответов выбранного пользователем теста. При этом мы будем получать все вопросы и ответы к ним выбранного теста. На мой взгляд, это снизит нагрузку на сервер, по сравнению с вариантом, когда у сервера запрашиваются вопросы по одному.


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

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

Метки: ,

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

  1. librusmc@rambler.ru

    Я наверное единственный начинающий, кто смоотрит, поэтому от меня вопрос: а если я хочу для каждого теста создавать свой массив, например, для Теста2, у меня будут questions2, answers2 и т.д., как это записать в функцию. я пробовал продублировать уже созданную функцию под questions, answers, только заменить везде на questions2, answers2, но ничего не вышло…

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

      В этом случае не получится просто изменить одну функцию, придется изменить всю логику работы тестов. Если Вы начинающий, тогда рекомендую подтянуть для начала знания по PHP и MySQL, поскольку без них решить поставленную задачу будет проблематично.

  2. librus

    спасибо :) . так и делаю, просто поставленная задача по срокам оказалась трудновыполнимой, НО благодаря видеоурокам — возможной. я так и делаю — начал смотреть ваш Курс по PHP программированию (17 уроков). надеюсь, что освою. эххх…

  3. sa_98_sa@mail.ru

    Пишет не определенный get_test_data

  4. sa_98_sa@mail.ru

    Примечание : неопределенная переменная: test_id в C: \ OSPanel \ domains \ localhost \ engsearch \ test \ functions.php в строке 23

    Неустранимая ошибка : вызов неопределенной функции get_test_data () в C: \ OSPanel \ domains \ localhost \ engsearch \ test \ index.php в строке 13

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

      Ошибка говорит о том, что вызываемая функция либо не определена, либо недоступна. То же самое относится и к переменной. Поэтому проверяйте их доступность. Также можете сравнить Ваш код с кодом из исходников, там такой проблемы быть не должно.

  5. babdisamat@bk.ru

    Cannot re-assign auto-global variable _POST in C:\OSPanel\domains\localhost\testing\functions.php on line 93

    такая ошибка выводится ?

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

      С версии PHP 5.4 нельзя использовать глобальные переменные параметром функции. Поэтому просто удалите параметр $_POST из объявления функции и ее вызова.

  6. babdisamat@bk.ru

    Андрей я хочу сделать админку, возможно ли что когда отправляю одну форму(форма содержит вопрос, ответ) возможно ли по форме отправить данные чтобы вопросы падали в таблицу вопрос а ответы в таблицу ответы! и да как получить id вопроса, БД использую оракл! как в оракле реализовать ?

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

      Возможно. Два запроса: первый сохраняет вопрос в таблицу вопросов и возвращает ID сохраненной записи. Второй запрос использует этот ID и сохраняет во вторую таблицу варианты ответов. Функцию для получения ID добавленной записи я подсказал в предыдущем ответе.

  7. babdisamat@bk.ru

    хотел реализовать админку для добавления вопросов, опишите логику реализации!

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

      Аналогично предыдущему ответу, можно посмотреть тот же Каталог товаров, где начиная с 52-го урока показано создание админки.

  8. babdisamat@bk.ru

    Андрей такой вопрос я реализую админку допустим у меня такая проблема я там добавляю в поле ответы использую jquery append , когда отправляю по форме добавляется всего лишь один поле ответа остальные тупо исчезают не добавляются как решить? подскажите буду благодарен !

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

      Скорее всего, у этих полей одинаковое значение атрибута name. Значение должно быть разным или, еще лучше, массивом, например так: name=»answer[]«

  9. babdisamat@bk.ru

    так и сделал, а как их значение получить я перебираю foreach но данные не падают туда
    if(isset($_POST['otvet']))
    {

    // $ans = $_POST['ans'];
    $id_quest = 1;
    $otvet = 1;

    $sql_add_res = «Insert into RESULT_P(ID, ID_QUESTION, ANSWER, CORRECT_ANSWER) values (SEQ_RES.NEXTVAL, ‘$id_quest’, ‘$data’, ‘$otvet’)»;
    $list_add_res = $db -> execute($sql_add_res);
    }

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

      Распечатайте массив POST и посмотрите, так ли Вы сделали. HTML код Вы не показали, поэтому сказать так ли Вы сделали — не могу. Собственно, и foreach я в Вашем коде не вижу, а вижу только ответ в единственном экземпляре, который Вы и помещаете в запрос… никакого множества я здесь не вижу.

      • babdisamat@bk.ru

        Введите свой ответ

        кусок кода где я добавляю с помощью append ответы

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

          Это все тот же код PHP, кода HTML с полем формы я не вижу здесь. В любом случае, нужен живой код, только с ним можно провести отладку.

  10. erugemalira92@gmail.com

    что я могу сделать чтобы выводится русский букв… у меня просто выводиться «?????????» помогите пожалуйста

  11. kolomeitstolik1992@gmail.com

    Добрый день, хотел узнать как можно вывести в вопросе изображение, в таблицу вопросов уже добавил поле img типом mediumblob.

    • Андрей

      Здравствуйте. В БД лучше хранить путь к картинке, а саму картинку хранить по этому пути на сервер. В этом случае Вы просто в тег img подставите путь. Если же хранить файл в БД, тогда при его выводе нужно еще и отправлять заголовок в браузер, что далее пойдет графический файл. Все это связано с дополнительными трудностями и возможностями столкнуться с ошибками. Поэтому мой Вам совет — в БД храните путь к картинке.

      • kolomeitstolik1992@gmail.com

        Образовался такой вопрос, как можно реализовать данный запрос
        while($row = mysqli_fetch_assoc($res)){
        if(!$row['parent_question']) return false;
        $data[$row['parent_question']][0] = $row['question'];//Вопрос
        $data[$row['parent_question']][0] = $row['img'];//Картинка
        $data[$row['parent_question']][$row['id']] = $row['answer'];//Ответы
        }
        Получается так, что выходит картинка и вместо вопроса выходит ссылка на картинку.

        • Андрей

          Не понял вопроса. Какой запрос Вы хотите реализовать? Если Вам нужна картинка, тогда используйте тег img, где в атрибуте src будет находиться путь к картинке.

          • kolomeitstolik1992@gmail.com

            Я добавил в базу еще одно поле, в которое записывается путь до картинки (не в каждом вопросе есть картинка). Нужно вывести вопрос, картинка к вопросу и ответы на вопрос.

          • Андрей

            Ну, так а в чем проблема-то? Проверяете условием есть ли картинка и, если она есть — выводите ее в теге img. Если нет — выводите картинку по умолчанию (no image) или не выводите.

  12. kolomeitstolik1992@gmail.com

    function get_ticket_data($ticket_id){
    if(!$ticket_id) return;
    global $CONNECT;
    $query = «SELECT q.question, q.id AS question_id, q.parent_ticket, q.img, a.id, a.answer, a.parent_question
    FROM questions q
    LEFT JOIN answers a
    ON q.id = a.parent_question
    LEFT JOIN ticket
    ON ticket.id = q.parent_ticket
    WHERE q.parent_ticket = $ticket_id AND ticket.enable = ’1′»;

    $res = mysqli_query($CONNECT, $query);
    $data = null;
    while($row = mysqli_fetch_assoc($res)){
    if(!$row['parent_question']) return false;
    $data[$row['parent_question']][0] = $row['question'];//Вопрос
    $data[$row['parent_question']][0] = $row['img'];//Картика
    $data[$row['parent_question']][$row['id']] = $row['answer'];//Ответы
    }
    return $data;
    }
    Выделенную строку я добавил. Вывести картинку у меня получилось, но при таком условии у меня вопрос становится ссылкой на картинку.

    • Андрей

      Ну так Вы элемент массива с вопросом перезаписываете картинкой. Поместите картинку в отдельный элемент массива, как-то так примерно (точнее — нужно пробовать):
      $data[$row['parent_question']]['img'] = $row['img'];//Картика

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree